jquery:等待所有ajax调用完成后再继续。
jquery:等待所有ajax调用完成后再继续。
这个问题已经有了答案:
我在document.ready()中有一些ajax调用
例如:
for (j=1; j <= 7; j++){ (function(index) { $.getJSON('my.php', {id:index}, function(data) { $.each(data, function(index2, array){ ........ }); }); })(j) } //DO NOT CONTINUE UNTIL FINISH AJAX CALLS ........ MORE JQUERY CODE
我该如何强制它等待,直到我们从ajax请求中得到所有回调才继续?
admin 更改状态以发布 2023年5月21日
首先,你可能要考虑将启动代码放在一个单独的调用中完成。
其次,不要等待,只需调用另一个函数。对于上面的代码,它应该像这样:
for (j=1; j <= 7; j++){ (function(index) { $.getJSON('my.php', {id:index}, function(data) { $.each(data, function(index2, array){ ........ }); if (j === 7) { initDoneDoMoreStuff() } }); })(j) }
或者触发:
for (j=1; j <= 7; j++){ (function(index) { $.getJSON('my.php', {id:index}, function(data) { $.each(data, function(index2, array){ ........ }); if (j === 7) { $(document).trigger("initdone"); } }); })(j) } $(document).bind("initdone", function() {....});
我不喜欢任何答案,最好的方法(自Jquery 1.5+以来)是使用Deferred对象,这些对象用于操作异步调用,您可以解决:
$.when($.ajax("/page1.php"), $.ajax("/page2.php")) .then(myFunc, myFailure);
通过这种方式,myFunc在完成2个ajax调用后执行,如果出现任何一个错误,则执行myFailure。
您可以在jquery官方文档中了解更多信息:JQuery Deferred Object
如果有人看到这篇文章,这种解决方案可能会有所帮助。
对不起我的英语:P