Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: AJAX не модифицирует глобальные и внешние переменные
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » AJAX не модифицирует глобальные и внешние переменные

Страниц (1): [1]
 

1. reno4 - 15 Июня, 2016 - 01:53:41 - перейти к сообщению
Допустим, есть глобальная переменная

var j = {};

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

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function nnn () {
  3. ....
  4.     $.ajax ({
  5.         method: "GET",
  6.         url: "../locale/forms.json",
  7.         dataType: "json",
  8.         success: function (data) {
  9.             j["estimates"] = "test";
  10.             console.log ("IN = " + j["estimates"]);
  11.         }
  12.     });
  13. ....
  14.  

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

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

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

AFTER: undefined
IN = test

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

Как можно решить эту проблему? Требуется загрузить с сервера данные в JSON формате в соответствующий объект, чтобы потом МНОГОКРАТНО его использовать.
2. Мелкий - 15 Июня, 2016 - 08:25:55 - перейти к сообщению
Всё работает как и должно, переменной значение присваивается. А вы не понимаете суть первой буквы в аббревиатуре AJAX.
3. reno4 - 15 Июня, 2016 - 15:32:46 - перейти к сообщению
С момента публикации суть вопроса несколько изменилась.

Нужен способ синхронизации, отличный от выставления параметра ASYNC: FALSE.
Ибо полученные данные необходимо использовать снаружи AJAX и делать это МНОГОКРАТНО.
4. Viper - 15 Июня, 2016 - 15:54:05 - перейти к сообщению
reno4 пишет:
Нужен способ синхронизации, отличный от выставления параметра ASYNC: FALSE.
неверная логика работы с данными. Работайте с полученными данными в калбеке, в чем проблема-то?
5. IllusionMH - 15 Июня, 2016 - 16:40:02 - перейти к сообщению
reno4 пишет:
Ибо полученные данные необходимо использовать снаружи AJAX и делать это МНОГОКРАТНО.

reno4, стройте логику так, чтобы начинать работать с этими данными только после выполненеи колбека.
Так же можно написать обертки на методы которые в случае их отсутствия будут делать запрос и продолжать выполение только после коллбека.

По поводу примера выше и многократного использования - всё отлично будет работать и логироваться по клику на кнопку ПОСЛЕ того как выполнится колбек, но не обязательно прямо в нем.
6. reno4 - 18 Июня, 2016 - 09:43:03 - перейти к сообщению
Проблема решена. Как вариант, сделал загрузку требуемых данных сразу после авторизации при загрузке первой страницы. И пока пользователь размышляет над тем, что делать дальше - данные должны успеть загрузиться.

А насчет того, что все должно выполняться в колбэке - это решение я уже рассматривал и от него пришлось отказаться.
7. nerv - 25 Июня, 2016 - 13:32:03 - перейти к сообщению
reno4 пишет:
А насчет того, что все должно выполняться в колбэке - это решение я уже рассматривал и от него пришлось отказаться.

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

А еще потом ты спросишь почему у них зарплата больше в три раза)))
Но это уже совсем другая история Подмигивание

 

Powered by ExBB FM 1.0 RC1