【发布时间】:2011-02-25 01:44:29
【问题描述】:
假设我们必须通过 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:感谢链接回调的解决方案。我找到了一个好方法here:。这就是 cmets 中提出的:
(function hidenext(jq){
jq.eq(0).fadeOut("fast", function(){
(jq=jq.slice(1)).length && hidenext(jq);
});
})($('div#bodyContent a'))
稍作调整即可等待最后一次回调。
现在我想正确处理长时间运行的请求。有什么线索吗?
【问题讨论】:
-
这个之前有人问过,但不是 XHR,而是一系列 DOM 事件。我也记不起问题的名称了。
标签: javascript jquery ajax functional-programming callback