Обратный вызов Jquery для каждого метода - PullRequest
0 голосов
/ 29 апреля 2018

У меня небольшая проблема с методом jQuery each ():

jQuery(":button[attributeFoo=\"bar\"]").each(function( index ) {
  jQuery( this ).click();
});

location.reload(true);

Здесь первая инструкция получает список кнопок html и нажимает () на каждую из них (таким образом запускает действие ajax). А потом я хочу перезагрузить страницу. Но здесь страница перезагружается до того, как все запросы ajax click () будут выполнены.

Каков наилучший способ дождаться завершения обмена кликами ajax, прежде чем перезагрузить страницу?

Ответы [ 3 ]

0 голосов
/ 29 апреля 2018

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

0 голосов
/ 29 апреля 2018

В этом случае

Вы можете проверить количество запросов к серверу и, если оно равно 0, перезагрузить страницу.

jQuery(":button[attributeFoo=\"bar\"]").each(function( index ) {
    jQuery( this ).click();
});

while(jQuery.active != 0)
{
}

location.reload(true);
0 голосов
/ 29 апреля 2018

Ваш код работает следующим образом:

Все, что вы установили внутри функции обратного вызова, будет выполнено, пока процесс еще продолжается. Но следующее предложение:

location.reload(true);  

(который находится за пределами обратного вызова, «ожидающего» результатов) выполняется сразу после оператора jquery, не заботясь о том, закончился этот оператор или нет.

Одно решение, которое может работать на вас:

var elements=jQuery(":button[attributeFoo=\"bar\"]");
var total=elements.length;

jQuery(elements).each(function( index, elem ) {
  jQuery(elem).click();
  if(index == total-1) 
    location.reload(true);
});

console.log("show before reload")

Итак, он перезагружает страницу, как только последний элемент был обработан (нажат) внутри обратного вызова. Помните, что сообщение «покажите перед перезагрузкой» появится перед обновлением страницы.

...