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 блока

 PHP.SU

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


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

> Описание: loading.gif
pantela
Отправлено: 02 Октября, 2015 - 13:52:59
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


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




Имеются 6 AJAX функции, все вызываются при открытии страницы $(document).ready(function()

При вызове функции использую вывод div блока с loading.gif анимацией...
CODE (html):
скопировать код в буфер обмена
  1. <div class="ajax-loader" style="display: none;">
  2.         <img src="/Public/content/images/loading.gif">
  3. </div>


В функциях, при вызове в начале пишу $('.ajax-loader').show(); и $('.ajax-loader').hide();, но т.к. DIV блок у меня общий для всех, у меня происходит проблема, когда напр. функция №1 до конца загрузилось и закончилось с $('.ajax-loader').hide();, но т.к. другие функции не успевают загружаться, получается у них DIV блок пропадает...

Какое решение есть...
Тупо делать для каждой функции свой DIV блок как-то не хочется, т.к. дублирование кода получается...
 
 Top
DelphinPRO
Отправлено: 02 Октября, 2015 - 14:45:35
Post Id



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


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


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




Открываем jQuery API, смотрим какие есть методы у модуля ajax.

Подсказка: там есть два нужных вам метода, в одном вы будете показывать лоадер-анимацию, во втором прятать.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
pantela
Отправлено: 02 Октября, 2015 - 18:32:03
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


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




спс, почитаю... т.е. тупо перед $.ajax мне не надо будет выводить $('.ajax-loader').show(); и $('.ajax-loader').hide();? Наверное до запуска AJAX запроса буду выводить и при удачном случае...? Но вроде проблема всё равно будет т.к. DIV блок у меня ведь общий... Откуда он будет понимать какой AJAX функция запускает его и закрывает...

(Отредактировано автором: 02 Октября, 2015 - 18:32:45)

 
 Top
DelphinPRO
Отправлено: 03 Октября, 2015 - 14:00:23
Post Id



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


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


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




Мимо...
API не читал..


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
pantela
Отправлено: 03 Октября, 2015 - 14:55:17
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


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




Ну вроде ajaxStart() и ajaxStop() Закатив глазки

Но вроде не поможет... Представь себе запускаются одновременно 2 функции, выводиться DIV блок, №1 функция закончила загрузку и спратала DIV блок, а вторая ещё не знакончила, но DIV блок она уже не имеет...

Или с помощью ajaxStart() и ajaxStop() можно отследить все действия AJAX функции на странице которые?
т.е. у меня ведь общий DIV блок для всех...
 
 Top
Deonis
Отправлено: 03 Октября, 2015 - 16:43:30
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


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




pantela пишет:
Имеются 6 AJAX функции, все вызываются при открытии страницы
Для меня такой подход навечно останется загадкой. Почему бы не сделать один запрос, на сервере выполнить сценарии, которые вы собирались выполнять для всех шести? Ну да ладно... Если ближе к вопросу, то есть такой метод, как $[dot]ajaxSetup() (хоть и не очень рекомендованный), в котором можно установить параметры beforeSend и complete для всех ajax-запросов. Т.е. в beforeSend вы открываете прелоадер, а в complete - скрываете. Однако, скрывать в complete не подойдет, т.к. прелоадер будет скрыт после завершения первого же запроса. Для таких целей подойдут "Обещания" (Promise). В jQuery для таких целей есть объект Deferred со своими методами. Вот простой пример.

CODE (javascript):
скопировать код в буфер обмена
  1. var log = $('div'),
  2.     loader = $('span'); // это как бы ваш элемент с loading.gif
  3. $.ajaxSetup({
  4.     beforeSend: function(){
  5.         loader.show();
  6.     },
  7.     success: function(d){
  8.         log.append('<p>' + d + ' завершен</p>');
  9.     }
  10. });
  11. function foo1(){
  12.     return $.ajax({
  13.         url: '/echo/html/',
  14.         type: 'POST',
  15.         data: {delay: 3, html: 'Запрос 1'}
  16.     });
  17. }
  18. function foo2(){
  19.     return $.ajax({
  20.         url: '/echo/html/',
  21.         type: 'POST',
  22.         data: {delay: 5, html: 'Запрос 2'}
  23.     });
  24. }
  25. function foo3(){
  26.     return $.ajax({
  27.         url: '/echo/html/',
  28.         type: 'POST',
  29.         data: {delay: 1, html: 'Запрос 3'},
  30.     });
  31. }
  32.  
  33. $.when(foo1(), foo2(), foo3()).then(function(r1, r2, r3){
  34.     log.append('<strong>Все запросы завершены! Скрываем лоадер </strong>');
  35.     loader.fadeOut(3000);
  36. });

(Отредактировано автором: 03 Октября, 2015 - 16:46:49)

 
 Top
DelphinPRO
Отправлено: 03 Октября, 2015 - 17:12:50
Post Id



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


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


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




pantela пишет:
Ну вроде ajaxStart() и ajaxStop()

Бинго! Улыбка

Первая будет вызвана, если на странице ЕЩЕ не выполняется НИ ОДИН запрос.
Вторая будет вызвана, когда на странице УЖЕ закончится ПОСЛЕДНИЙ запрос.

Это то что вам нужно.
(Добавление)
Deonis ajaxStart и ajaxStop делают то же самое "из коробки" ;)


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
pantela
Отправлено: 04 Октября, 2015 - 21:08:57
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


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




Ну через ajaxSetup можно использовать для определение всех функции, а через ajaxStart и ajaxStop надо писать для каждой функции вроде да...или...?

спс.Ув.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB