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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: AJAX не модифицирует глобальные и внешние переменные

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
reno4
Отправлено: 15 Июня, 2016 - 01:53:41
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июнь 2016  


Помог: 0 раз(а)




Допустим, есть глобальная переменная

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 формате в соответствующий объект, чтобы потом МНОГОКРАТНО его использовать.
 
 Top
Мелкий Супермодератор
Отправлено: 15 Июня, 2016 - 08:25:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Всё работает как и должно, переменной значение присваивается. А вы не понимаете суть первой буквы в аббревиатуре AJAX.


-----
PostgreSQL DBA
 
 Top
reno4
Отправлено: 15 Июня, 2016 - 15:32:46
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июнь 2016  


Помог: 0 раз(а)




С момента публикации суть вопроса несколько изменилась.

Нужен способ синхронизации, отличный от выставления параметра ASYNC: FALSE.
Ибо полученные данные необходимо использовать снаружи AJAX и делать это МНОГОКРАТНО.
 
 Top
Viper
Отправлено: 15 Июня, 2016 - 15:54:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




reno4 пишет:
Нужен способ синхронизации, отличный от выставления параметра ASYNC: FALSE.
неверная логика работы с данными. Работайте с полученными данными в калбеке, в чем проблема-то?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
IllusionMH
Отправлено: 15 Июня, 2016 - 16:40:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




reno4 пишет:
Ибо полученные данные необходимо использовать снаружи AJAX и делать это МНОГОКРАТНО.

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

По поводу примера выше и многократного использования - всё отлично будет работать и логироваться по клику на кнопку ПОСЛЕ того как выполнится колбек, но не обязательно прямо в нем.

(Отредактировано автором: 15 Июня, 2016 - 17:14:30)

 
 Top
reno4
Отправлено: 18 Июня, 2016 - 09:43:03
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июнь 2016  


Помог: 0 раз(а)




Проблема решена. Как вариант, сделал загрузку требуемых данных сразу после авторизации при загрузке первой страницы. И пока пользователь размышляет над тем, что делать дальше - данные должны успеть загрузиться.

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



Посетитель


Покинул форум
Сообщений всего: 407
Дата рег-ции: Февр. 2013  
Откуда: Россия


Помог: 9 раз(а)




reno4 пишет:
А насчет того, что все должно выполняться в колбэке - это решение я уже рассматривал и от него пришлось отказаться.

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

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


-----
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB