jquery:等到所有ajax调用完成然后继续

我的文档中有一些ajax调用.ready()

喜欢 :

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请求中得到所有回调?

我根本不喜欢任何答案,最好的方法(因为Jquery 1.5+)是使用Deferred对象,那些是操作异步调用的对象,你可以解决:

 $.when($.ajax("/page1.php"), $.ajax("/page2.php")) .then(myFunc, myFailure); 

这样,myFunc在进行2次ajax调用后执行,而myFailure如果有任何一次出错则执行。

您可以在jquery官方文档中阅读更多相关信息: JQuery Deferred Object

我写这个解决方案如果有人看到这篇文章可能会有所帮助。

对不起我的英文:P

首先,您可能需要考虑在一次调用中执行启动代码。
第二:而不是等待只是调用另一个函数调用。 对于上面的代码,它应该看起来像:

 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() {....}); 

我这样做并不容易,但也许你发现我的代码很有用。 这是一个在dom中提交所有表单的过程,在存储完所有表单后,将用户重定向到另一个页面。

 formulario = $('form'); formulariolongitud = formulario.length; i = 0; formulario.each(function(index, value) { $(this).ajaxSubmit({ async: false,//not sure i success: function() { i++; if(i === formulario.length) {//this is the last one to submit window.location.replace(whatever); } } }); }); 

你可以使用sucess(即ajax jquery的回调函数),如下所示:

 $.ajax({ url: url, dataType: 'json', data: data, success: function(data){ //Write your code here. } }); 

你可以在下面获得ajax的文档 –

阿贾克斯

像if(j == 7)这样的问题是第7个请求非常快的情况,甚至其中一个请求很慢。 即使你最后排队,也可能不是最后完成的。

这个答案似乎适用于所有条件: https : //stackoverflow.com/a/3709809/813154