想象一下,我们必须依靠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)
我在这里不喜欢的是,在这种情况下,我无法处理响应失败(例如,我无法设置响应超时)和整体方法(我想应该有一种方法可以使用更多功能)在这里编程)
有任何想法吗?
问候!
UPD: 感谢您提供链式回调的解决方案。我在这里找到了一个很好的方法。这是评论中提出的内容:
(function hidenext(jq){ jq.eq(0).fadeOut("fast", function(){ (jq=jq.slice(1)).length && hidenext(jq); }); })($('div#bodyContent a'))
稍作调整,即可等待上一次回调。
现在我想处理长时间运行的请求。 有什么线索吗?
也许您可以“级联”下载,所以第一个getJSON的回调会触发从下一个来源的下载,依此类推?然后,在最后一个回调中,您将没有任何源,可以调用“完成”功能。