小编典典

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

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)

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

有任何想法吗?

问候!

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

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

稍作调整,即可等待上一次回调。

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


阅读 232

收藏
2020-07-26

共1个答案

小编典典

也许您可以“级联”下载,所以第一个getJSON的回调会触发从下一个来源的下载,依此类推?然后,在最后一个回调中,您将没有任何源,可以调用“完成”功能。

2020-07-26