Переменная видимость в функциях обратных вызовов - PullRequest
0 голосов
/ 20 августа 2010

Я сделал эту функцию для получения результатов запроса непосредственно в полезной структуре данных.Проблема заключается в следующем: в первом вызове console.log () внутри функции обратного вызова переменная хранимых данных содержит точные результаты, во втором вызове console.log () переменная хранимых данных выглядит как не инициализированнаяПредложения ??Ниже код:

function dojo_query_mysql(query_string) {
      //The parameters to pass to xhrPost, the message, and the url to send it to
      //Also, how to handle the return and callbacks.
      var stored_data;
     var raw_data = new Object;
      var xhrArgs = {
      url: "query.php",
      postData: query_string,
      handleAs: "text",
      load: function(data) {
          raw_data = dojo.fromJson(data);
          stored_data = new dojo.data.ItemFileReadStore({data: raw_data});
    console.log(stored_data);
       },
      error: function(error) {
          //We'll 404 in the demo, but that's okay.  We don't have a 'postIt' service on the
          //docs server.
          //stored_data = error;
        }
      }
      //Call the asynchronous xhrPost
      var deferred = dojo.xhrPost(xhrArgs);
    console.log(stored_data);
      return stored_data;
    }

1 Ответ

0 голосов
/ 20 августа 2010

Я только что вспомнил, что функция не ждет окончания выполнения обратного вызова, для ожидания окончания обратного вызова просто внесите небольшое изменение в код:

var xhrArgs = {
      url: "query.php",
sync: true, // THIS IS FORCE THE SYNCRONIZATION BETWEEN THE CALLBACK AND THE CODE
      postData: query_string,
      handleAs: "text",
      load: function(data) {
          raw_data = dojo.fromJson(data);
          stored_data = new dojo.data.ItemFileReadStore({data: raw_data});
    console.log(stored_data);
       },
      error: function(error) {
          //We'll 404 in the demo, but that's okay.  We don't have a 'postIt' service on the
          //docs server.
          //stored_data = error;
        }
      }
...