Как узнать, когда все вызовы ajax завершены

У меня есть страница стиля таблицы со строками. Каждая строка имеет флажок. Я могу выбрать все / много флажков и нажать «отправить», а что есть JQuery ajax для каждой строки.

В основном у меня есть форма для каждой строки, и я перебираю все проверенные строки и отправляю эту форму, которая выполняет вызов jquery ajax.

Поэтому у меня есть кнопка, которая делает:

$("input:checked").parent("form").submit(); 

Тогда каждая строка имеет:

  <form name="MyForm" action="javascript:processRow()" method="post" style="margin:0px;">  <input type="hidden" id="XNumber" name="X" value=""/> <input type="hidden" id="XId" name="XId" value=""/> <input type="hidden" id="XAmt" name="XAmt" value=""/>   

Эта форма отправляет processRow:

  function processRow(rowNum) { var Amount = $('#XAmt'+rowNum).val(); var XId = $('#XId'+rowNum).val(); var XNum = $('#OrderNumber'+rowNum).val(); var queryString = "xAmt=" + "1.00" + "&xNumber=" + OrdNum + "&xId=" + xId; $('#coda_'+rowNum).removeClass("loader"); $('#coda_'+rowNum).addClass("loading"); $.ajax({ url: "x.asp", cache: false, type: "POST", data: queryString, success: function(html){ $('#result_'+rowNum).empty().append(html); $('#coda_'+rowNum).removeClass("loading"); $('#coda_'+rowNum).addClass("loader"); } }); } 

То, что я хотел знать, состоит в том, что я могу сказать, все ли мои Ajax-звонки завершены. Причина в том, что хотите включить / отключить кнопку отправки во время всех этих вызовов.

Благодарим вас и учтите, что мне пришлось менять имена переменных из-за чувствительности приложения, поэтому многие из них могут быть дублированы.

Простой способ

Самый простой способ – использовать обработчик события .ajaxStop() :

 $(document).ajaxStop(function() { // place code to be executed on completion of last outstanding ajax call here }); 

Трудный путь

Вы также можете вручную определить, включен ли какой-либо аякс-вызов:

Создайте переменную, содержащую количество активных соединений Ajax:

 var activeAjaxConnections = 0; 

перед открытием нового увеличения соединения Ajax эта переменная

 $.ajax({ beforeSend: function(xhr) { activeAjaxConnections++; }, url (...) 

в success части проверьте, равна ли эта переменная нулю (если это так, последнее соединение завершено)

 success: function(html){ activeAjaxConnections--; $('#result_'+rowNum).empty().append(html); $('#coda_'+rowNum).removeClass("loading"); $('#coda_'+rowNum).addClass("loader"); if (0 == activeAjaxConnections) { // this was the last Ajax connection, do the thing } }, error: function(xhr, errDesc, exception) { activeAjaxConnections--; if (0 == activeAjaxConnections) { // this was the last Ajax connection, do the thing } } 

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

Оптимальное решение было бы использовать;

 $("body").ajaxStop(function() { //Your code }); 

Для получения дополнительной информации проверьте функцию jQuery .ajaxStop по адресу http://api.jquery.com/ajaxStop/

Может быть:

 jQuery.active == 0 

Украден из:

http://artsy.github.com/blog/2012/02/03/reliably-testing-asynchronous-ui-w-slash-rspec-and-capybara/

Дополнительная информация о StackOverflow:

Функция jQuery.active

Как насчет просто использовать, если ?

 success: function(html){ if(html.success == true ){ $('#result_'+rowNum).empty().append(html); $('#coda_'+rowNum).removeClass("loading"); $('#coda_'+rowNum).addClass("loader"); } } 
  • проверка хотя бы одного флажка
  • Как взять id в качестве селектора при использовании hashа?
  • Как я могу расширить jQueryUI datepicker, чтобы принять дополнительный аргумент?
  • Как прокручивать страницу вверх или вниз на якорь с помощью jQuery?
  • jQuery .data () не работает, но .attr () делает
  • Запуск jquery с запросами css media
  • Удалите HTML-тег, но сохраните innerHtml
  • Вызов ASMX из jQuery
  • отправка нескольких форм с помощью AJAX
  • jQuery цикл над JSON является результатом успеха AJAX?
  • Закрыть jQuery UI Dialog из Iframe
  • Давайте будем гением компьютера.