[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: AJAX не модифицирует глобальные и внешние переменн
reno4
Допустим, есть глобальная переменная

var j = {};

И есть AJAX запрос

function nnn () {

....

$.ajax ({
method: "GET",
url: "../locale/forms.json",
dataType: "json",
success: function (data) {
j["estimates"] = "test";
console.log ("IN = " + j["estimates"]);
}
}
);
....


Есть еще в той же функции вывод в лог после AJAX

console.log ("AFTER: " + j["estimates"]);

В итоге в логе видим

AFTER: undefined
IN = test

мало того, что последовательность нарушена, так еще и откатывается любое изменение внешней переменной, созданной не в AJAX, после завершения AJAX.

Как можно решить эту проблему? Требуется загрузить с сервера данные в JSON формате в соответствующий объект, чтобы потом МНОГОКРАТНО его использовать.
redreem
Цитата (reno4 @ 15.06.2016 - 02:43)
Есть еще в той же функции вывод в лог после AJAX

console.log ("AFTER: " + j["estimates"]);

то, что он "после", не означает, что он исполнится "после". происходит ajax-запрос, и тут же, не дожидаясь ответа идет вывод в консоль. естественно undefined, ведь ответ еще не пришел.
как раз для этого случая в $.ajax есть свойства-функции success, error, complete.
Invis1ble
ТС, рекомендую почитать про расшифровку AJAX, и подумать над первой буковкой smile.gif

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

reno4
Всем спасибо, с момента публикации суть вопроса несколько изменилась. :-)

Нужен способ синхронизации, отличный от выставления параметра ASYNC: FALSE.
Ибо полученные данные необходимо использовать снаружи AJAX и делать это МНОГОКРАТНО.
Invis1ble
Цитата (reno4 @ 15.06.2016 - 15:32)
Ибо полученные данные необходимо использовать снаружи AJAX и делать это МНОГОКРАТНО.

function foo() {
return $.ajax('http://phpforum.su/');
}

var deferred = foo();
var data = {};

// some code

deferred.done(function (response) {
console.log('async 1');
data.response = response;
console.log(data.response);
});

// other code

deferred.done(function (response) {
console.log('async 2');
console.log(data.response);
});


https://api.jquery.com/Types/#jqXHR

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.