AJAX - данные ответа не сохраняются в глобальном масштабе? - PullRequest
4 голосов
/ 13 июля 2011

У меня проблема с тем, что мои показанные ниже строки не хранят переменную в глобальной области видимости:

var somedata;

$.ajax({
    cache: false,
    url: verification_url,
    success: function(data){
        somedata = data;
    }
});

alert(somedata); // Undefined

Что я делаю не так? Нужно ли обернуть это в отдельную функцию или как?

Ответы [ 2 ]

11 голосов
/ 13 июля 2011

Код alert() запускается до получения ответа от $.ajax.

Вот почему это undefined.

var somedata;

$.ajax({
    cache: false,
    url: verification_url,
    success: function(data){
        somedata = data;

        alert( somedata );   // 2. this will occur after the response is received
    }
});

alert(somedata); // 1. this will occur first

Здесь вы можете видеть, что оповещения происходят не по порядку. По умолчанию запрос AJAX не запрещает запуск следующего кода.

Вот и вся цель метода callback . Это метод, который вызывается в соответствующее время, вместо того, чтобы полагаться на синхронное выполнение.

5 голосов
/ 13 июля 2011

AJAX является асинхронным.Вот что означает A в сокращении.Вы можете получить доступ к результатам только в обратном вызове успеха:

$.ajax({
    cache: false,
    url: verification_url,
    success: function(data){
        // HERE AND ONLY HERE YOU HAVE THE RESULTS
        // So it is here that you should manipulate them
        alert(data);
    }
});

// this line is executed MUCH BEFORE the success callback 
// and the server hasn't yet sent any response.

Таким образом, любой код, который должен манипулировать результатами, должен быть помещен в обратный вызов успеха или в функцию, которая вызывается из обратного вызова успеха.Вы не должны полагаться на глобальное состояние для этого шаблона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...