当每个循环中的所有ajax调用成功时,如何执行操作?
我在.each循环中调用ajax jquery函数,我想在循环内的所有ajax调用完成并成功时执行操作。
$(".checked-box").each(function () { // ajax call goes here }); $('.messsage').html('all requests done');
怎么做? 没有async: false
因为这会阻止浏览器。
这是一种方式:
var numberOfPendingRequests = 8; $(".checked-box").each(function () { $.ajax({ success: function(){ ... numberOfPendingRequests --; if(numberOfPendingRequests == 0) allDone(); } }); }); function allDone(){ $('.messsage').html('all requests done'); }
您可以根据您的复选框数量计算初始numberOfPendingRequests
,或者在每个ajax请求之前以0为增量开始计算,但这是一般的想法。
希望这可以帮助。 干杯
延期可以使您的工作更简单。
var deferreds = $('.checked-box').map(function(i, elem) { return $.ajax(params); }); $.when.apply(null, deferreds.get()).then(function() { ... });
希望这应该有效。
这个概念是
$.when( $.ajax( "1" ), $.ajax( "2" ), $.ajax( "3" ) ).then( successFunc, failureFunc );
试试这个:
AjaxRequestCount = 0; //JUST prepare ajax requests here, do not send yet... $(".checked-box").each(function () { AjaxRequestCount += 1; //Count number of ajax request //set "success:" of each ajax to Success() function }); //Send ajax requests here, use a loop... for(i=0;i
请查看本文第3.1节,了解等待异步内容结束的完整示例