【问题标题】:How can I make sure all AJAX requests have completed before running a new function?在运行新功能之前,如何确保所有 AJAX 请求都已完成?
【发布时间】:2013-04-14 17:13:19
【问题描述】:

我正在创建一个应用程序,该应用程序根据用户从表单中选择的名称显示推文。选择被传递给“getTweets”函数,如下所示:

function getTweets(selections) {

    var holdTweets = [];

    $.each( selections, function(){

        $.ajax({
            url: 'http://api.twitter.com/1/statuses/user_timeline/'+this.id+'.json?callback=?',
            dataType: 'jsonp',
            success: function(data) { holdTweets.push(this); },
            error: function() { console.log('something went wrong'); }
        });

    });
}

在所有 AJAX 请求完成后,我想在解析 JSON 之前对 holdTweets 数组进行排序。

起初一切正常:AJAX 请求正在返回 JSON,并且正在填充 holdTweets 数组。是否可以在进行排序之前检查所有 AJAX 请求是否已完成?如果是这样,怎么做?

提前致谢!

【问题讨论】:

  • 火箭科学在哪里?记住您发出了多少请求,以及完成了多少请求。当您发出所有请求并且已完成的请求数量与之匹配时,瞧,它们都已完成。
  • 只计算选择的长度,并添加一个setInterval来检查holdTweets中AJAX调用的长度=选择的长度
  • 不需要设置间隔,使用完整回调即可。

标签: jquery ajax json twitter jsonp


【解决方案1】:

谢谢,伙计们。我已经这样做了,它工作正常。

function getTweets(selections) {

    var holdTweets = [];

    $.each( selections, function(){

        $.ajax({
            url: 'http://api.twitter.com/1/statuses/user_timeline/'+this.id+'.json?callback=?',
            dataType: 'jsonp',
            success: function(data) { 
                holdTweets.push(this);
                if(holdTweets.length === selections.length) { 
                    sortFunction(holdTweets); 
                }
            },
            error: function() { console.log('something went wrong'); }
        });

    });
}

【讨论】:

    【解决方案2】:

    当您使用 jQuery 时,ajaxStop 方法允许您注册一个处理程序,以便在所有 Ajax 请求完成时调用。

    【讨论】:

      猜你喜欢
      • 2019-02-14
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 2019-08-17
      • 2020-03-17
      相关资源
      最近更新 更多