Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Обращение к глобальной переменной из jQuery (https://javascript.ru/forum/jquery/11228-obrashhenie-k-globalnojj-peremennojj-iz-jquery.html)

Иван Алексеев 13.08.2010 19:44

Обращение к глобальной переменной из jQuery
 
Добрый день.
Имеется следующий код:

$(function (){
   var abc;
   $.ajax({'url': './filename', 'type': 'GET', 'dataType': 'json', 'cache': false, success: function (data) {
      abc = data.x;
   }});
   alert (abc);
});

Объявляем переменную abc, при помощи $.ajax() получаем данные, присваиваем переменной abc новое значение, но оно не сохраняется.
Подскажите, пожалуйста, что нужно сделать, чтобы присвоить новое значение переменной abc?

exec 13.08.2010 20:02

$(function (){
   var abc;
   $.ajax({'url': './filename', 'type': 'GET', 'dataType': 'json', 'cache': false, success: function (data) {
      abc = data.x;
alert (abc);
   }});
   
});


На момент вызова алерта запрос ещё не выполнен и новое значение не получено.

Иван Алексеев 13.08.2010 20:12

Нет. В Вашем примере алерт показывает правильное значение, запрос выполнен и данные получены.

exec 13.08.2010 20:21

Цитата:

На момент вызова алерта запрос ещё не выполнен и новое значение не получено.
Это я писал про Ваш код, почему он не работает.
А в моём всё правильно.

Иван Алексеев 13.08.2010 20:44

Так, я понял. Весь код, который следует после $.ajax(...), выполняется сразу же, не дожидаясь завершения запроса.
А как этого можно избежать? Мне нужно сначала получить данные, и уже потом продолжать с ними работу.

exec 13.08.2010 20:49

Все действия осуществлять в callback'-е запроса. Этого всегда достаточно. Если у Вас не получается, значит, неправильный подход.

Хотя есть вариант сделать синхронный запрос (выставить async: false), но тогда браузер подвиснет до того момента, пока не будет получен ответ.

Иван Алексеев 13.08.2010 20:56

Хорошо. Все понятно.
Спасибо за помощь.


Часовой пояс GMT +3, время: 16:56.