Так работает асинхронное программирование .Функция $.get
«заканчивается», когда вызывается обработчик обратного вызова, а не линейно, следуя коду.
«Первый» alert()
, который сработает при запуске этого кода, будет вызван в последней строке (вне $.get
обработчика), к тому времени запрос ajax еще не был выполнен.
Второй alert
произойдет, когда завершится ajax (внутри обработчика $.get
), и отобразит данные, которые вы присвоили переменной, исходя из аргумента обработчика.
Некоторые комментарии к вашему коду, надеюсь, вы поймете лучше:
var foo; // foo is now undefined
jQuery.get('http://example.com/bar.txt', function(data) {
// the code in this handler will be executed after the ajax is complete
foo = data;
alert(foo); // foo is now the contents of bar.txt, this will happen last
});
alert(foo); // foo is still undefined, and this alert happens first
Вы можете запрограммировать это по-другому, если вам нужен пример того, как «повторно использовать» переменную foo:
var foo;
jQuery.get('http://example.com/bar.txt', function(data) {
foo = data;
onData();
});
function onData() {
alert(foo);
}