等待执行所有ajax回调的最佳解决方案

想象一下,我们必须得到ajax请求的来源。 我想在触发所有回调时执行一些操作。 除了这种方法,如何做到这一点:

(function($){ var sources = ['http://source1.com', 'http://source2.com'], guard = 0, someHandler = function() { if (guard != sources.length) { return; } //do some actions }; for (var idx in sources) { $.getJSON(sources[idx], function(){ guard++; someHandler(); }) } })(jQuery) 

我在这里不喜欢的是,在这种情况下,我无法处理响应失败(例如,我无法设置响应的超时)和整体方法(我想应该有一种方法来使用更多的function这里编程)

有任何想法吗?

问候!

UPD:感谢带有链接回调的解决方案。 我在这里找到了一个好方法:。 这是评论中提出的内容:

 (function hidenext(jq){ jq.eq(0).fadeOut("fast", function(){ (jq=jq.slice(1)).length && hidenext(jq); }); })($('div#bodyContent a')) 

通过一些调整,它可以等待最后一次回调。

现在我想要正确处理长时间运行的请求。 有什么线索吗?

也许你可以“级联”下载,所以第一个getJSON的回调会触发下一个源的下载,依此类推? 然后在最后一个回调中你没有剩下的来源,可以调用你的’完成’function。

重复的javascript:用一个回调执行一堆异步方法

 function createCallback(limit, fn){ var finishedCalls = 0; return function(){ if (++finishedCalls == limit){ fn(); } }; } var callback = createCallback(4, function(){ alert("woot!"); }); async1(callback); async2(callback); async3(callback); async4(callback); 

您总是可以在选项中使用带有“async:false”的$ .ajax和/或使用正确的回调(beforeSend,error,dataFilter,success和complete)。

也许我错了 – 但规则是:AJAX的序列化 – 一次一个所以你必须链接它 – 每个响应(回调函数)必须依次提交下一个响应

* .onreadystatechange会在你准备就绪时给你控制(一个function) – 在这里你可以依次提交下一个