Как я могу получить доступ к данным, возвращенным из вызова ajax вне функции обратного вызова AJAX в моем случае? - PullRequest
1 голос
/ 28 апреля 2011

У меня есть функция, которая генерирует ajax-вызов на сервер:

function askServer(callback) = {
     $.ajax({
       // ...
       async: true, //I have to use true here
       success: function(response) {
         callback(response); //callback handle server response
       },

     });
  };

Функция для обработки ответа сервера:

function handleResponse(){
     var dataObject;
     askServer(function(response){

         //response is an object {car:{id:2, name:TOYOTA}}
         dataObject=response.car;
     });
    //Now, I would like to access the dataObject outside callback function
    //but if I make it like this, the dataObject value will be null because it is outside the callback

}

Как я могу получить доступ к dataObject вне функции обратного вызова какЯ указал выше?(dataObject содержит данные ответа сервера)

Я должен использовать async: true, я знаю, что могу избавиться от проблемы, если использую async: false .

Ответы [ 4 ]

2 голосов
/ 28 октября 2011

Это вопрос присвоения значений ПОСЛЕ обратного вызова.Любая попытка сделать это раньше вызовет только «неопределенную» причуду.

Решение: Определите вашу функцию вне вашего вызова .ajax, затем в вашей функции успеха .ajax - вызовите функцию, которую вы определили PASSING возвращаемые данные.Если это не то, что вы искали, пожалуйста, сообщите нам, как вы решили свою проблему.Кроме того, ваш код немного сбивает с толку, и у вас есть запятая в вашей функции (ответ).Возможно, вы можете исправить это, если у вас есть решение исходного вопроса, чтобы другие могли найти этот пост более полезным.

Кстати - async = true по умолчанию;)

Cheers.

2 голосов
/ 28 апреля 2011
var dataObject;

function handleResponse() {
  askServer(function(response) {
    dataObject = response.car;
  });
}
1 голос
/ 29 апреля 2011

Если вам «нужно» выполнить асинхронный вызов, то по определению вы не знаете, сколько времени пройдет до того, как произойдет обратный вызов. Вот почему концепция обратного вызова используется в этой ситуации в первую очередь. Вся обработка, которая должна выполняться по результатам асинхронного вызова ajax, должна выполняться в обратном вызове (или в других функциях, вызываемых из обратного вызова).

Другие функции в других местах на вашей странице могут проверять, пришли ли результаты еще - если обратный вызов сохраняет результат в глобальной объявленной переменной, он, очевидно, не будет использоваться до тех пор, пока фактически не произойдет обратный вызов, но в это время другой код может проверить, является ли эта переменная нулевой или неопределенной: если это так, то вы все еще ждете ответа, но если есть значение, вы знаете, что ответ получен.

0 голосов
/ 28 апреля 2011

Объявите

var dataObject;

вне функции как переменную глобального уровня.Затем вы можете получить к нему доступ из любой другой функции.

...