pantela пишет:Имеются 6 AJAX функции, все вызываются при открытии страницы
Для меня такой подход навечно останется загадкой. Почему бы не
сделать один запрос, на сервере выполнить сценарии, которые вы собирались выполнять для всех шести? Ну да ладно... Если ближе к вопросу, то есть такой метод, как
$[dot]ajaxSetup() (
хоть и не очень рекомендованный), в котором можно установить параметры beforeSend и complete для всех ajax-запросов. Т.е. в beforeSend вы открываете прелоадер, а в complete - скрываете. Однако, скрывать в complete не подойдет, т.к. прелоадер будет скрыт после завершения первого же запроса. Для таких целей подойдут "Обещания" (
Promise). В jQuery для таких целей есть объект
Deferred со своими методами.
Вот простой пример.
CODE (
javascript):
скопировать код в буфер обмена
var log = $('div'),
loader = $('span'); // это как бы ваш элемент с loading.gif
$.ajaxSetup({
beforeSend: function(){
loader.show();
},
success: function(d){
log.append('<p>' + d + ' завершен</p>');
}
});
function foo1(){
return $.ajax({
url: '/echo/html/',
type: 'POST',
data: {delay: 3, html: 'Запрос 1'}
});
}
function foo2(){
return $.ajax({
url: '/echo/html/',
type: 'POST',
data: {delay: 5, html: 'Запрос 2'}
});
}
function foo3(){
return $.ajax({
url: '/echo/html/',
type: 'POST',
data: {delay: 1, html: 'Запрос 3'},
});
}
$.when(foo1(), foo2(), foo3()).then(function(r1, r2, r3){
log.append('<strong>Все запросы завершены! Скрываем лоадер </strong>');
loader.fadeOut(3000);
});