Ajay_Saini Ответов: 0

Показывать загрузчик до тех пор, пока все вызовы ajax asyc не будут завершены


Привет,
Пожалуйста, проясните следующую проблему, если есть какое-либо решение -
В ASP.NET я вызываю 4 веб-метода параллельно, используя $. ajax с async=true. Теперь давайте предположим, что есть 4 функции, которые я вызываю, чтобы использовать преимущества ajax как -

BindGridRecords();
BindNotifications();
BindProjectFiles();
BindFileCount();

Все они вызываются в той же последовательности, что и описано выше. Я использовал загрузчик gif-изображения, чтобы показать загрузчик в полноэкранном режиме в div и вызвал первую функцию, чтобы показать его и скрыть в самой последней функции (я знаю, что это не очень хороший способ, потому что может быть возможно, что последняя функция может завершиться раньше первой в асинхронных вызовах). Теперь у меня нет никакого выхода как показать изображение загрузчика до тех пор, пока все вышеперечисленные вызовы не будут завершены Не имеет значения, какая из них завершилась первой.

Что я уже пробовал:

Я пробовал использовать функцию$. when (), но похоже, что она вызывает синхронно и ухудшает производительность. Таким образом, цель асинхронных вызовов не используется.

На данный момент я использую async=false и устанавливаю функции таким образом, чтобы другая начиналась после завершения ранней. Но это требует времени.

я тоже пробовал это, но это не работает идеально, потому что это влияет и на другие вызовы

$(document).ajaxStart(function() {
    $('#overlay').show();    
});

$(document).ajaxStop(function() {
    $('#overlay').hide();
});

F-ES Sitecore

Определите переменную count с количеством вызываемых методов

количество var = 4;

при полном событии каждого ajax-метода вызывается функция, которая уменьшает количество и, если оно равно 0, удаляет загрузчик.

функция finishAjax()
{
считать--;
if (count == 0)
{
// удалить загрузчик
}
}

Ajay_Saini

О-о-о, отличная идея. Вы правы, я надеюсь, что это сработает. Я постараюсь с таким подходом увидеть эффект.

0 Ответов