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 :: Оптимизация JS и HTML DIV блока
В функциях, при вызове в начале пишу $('.ajax-loader').show(); и $('.ajax-loader').hide();, но т.к. DIV блок у меня общий для всех, у меня происходит проблема, когда напр. функция №1 до конца загрузилось и закончилось с $('.ajax-loader').hide();, но т.к. другие функции не успевают загружаться, получается у них DIV блок пропадает...
Какое решение есть...
Тупо делать для каждой функции свой DIV блок как-то не хочется, т.к. дублирование кода получается...
DelphinPRO
Отправлено: 02 Октября, 2015 - 14:45:35
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Открываем jQuery API, смотрим какие есть методы у модуля ajax.
Подсказка: там есть два нужных вам метода, в одном вы будете показывать лоадер-анимацию, во втором прятать.
----- Чем больше узнаю, тем больше я не знаю.
pantela
Отправлено: 02 Октября, 2015 - 18:32:03
Частый посетитель
Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010
Помог: 1 раз(а)
спс, почитаю... т.е. тупо перед $.ajax мне не надо будет выводить $('.ajax-loader').show(); и $('.ajax-loader').hide();? Наверное до запуска AJAX запроса буду выводить и при удачном случае...? Но вроде проблема всё равно будет т.к. DIV блок у меня ведь общий... Откуда он будет понимать какой AJAX функция запускает его и закрывает...
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Мимо...
API не читал..
----- Чем больше узнаю, тем больше я не знаю.
pantela
Отправлено: 03 Октября, 2015 - 14:55:17
Частый посетитель
Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010
Помог: 1 раз(а)
Ну вроде ajaxStart() и ajaxStop()
Но вроде не поможет... Представь себе запускаются одновременно 2 функции, выводиться DIV блок, №1 функция закончила загрузку и спратала DIV блок, а вторая ещё не знакончила, но DIV блок она уже не имеет...
Или с помощью ajaxStart() и ajaxStop() можно отследить все действия AJAX функции на странице которые?
т.е. у меня ведь общий DIV блок для всех...
Deonis
Отправлено: 03 Октября, 2015 - 16:43:30
Посетитель
Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009
Помог: 14 раз(а)
pantela пишет:
Имеются 6 AJAX функции, все вызываются при открытии страницы
Для меня такой подход навечно останется загадкой. Почему бы не сделать один запрос, на сервере выполнить сценарии, которые вы собирались выполнять для всех шести? Ну да ладно... Если ближе к вопросу, то есть такой метод, как $[dot]ajaxSetup() (хоть и не очень рекомендованный), в котором можно установить параметры beforeSend и complete для всех ajax-запросов. Т.е. в beforeSend вы открываете прелоадер, а в complete - скрываете. Однако, скрывать в complete не подойдет, т.к. прелоадер будет скрыт после завершения первого же запроса. Для таких целей подойдут "Обещания" (Promise). В jQuery для таких целей есть объект Deferred со своими методами. Вот простой пример.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.