【问题标题】:Order of deferred jquery ajax requests延迟 jquery ajax 请求的顺序
【发布时间】:2016-05-04 00:56:32
【问题描述】:

我有语言列表,['en', 'de'] 等等,我想为每种语言处理复杂的 ajax 请求。在第一个 ajax 请求中,我得到了每种语言的意图数量。

var languages = ['en', 'de', 'es', 'fr', 'it', 'cn'];
intents_dic = [];
chart_quantity = ['quantity'];
for (var x = 0; x < languages.length; x++){
    $.ajax({
    url: 'url',
    type: 'GET',
    async: false,
    success: function(data){
        for (i in data){
            intents_dic.push(data[i]['id'])
        }
        var intents_count = 0;
        var deferreds = [];

在第二步中,我需要计算上一次通话中每个意图的短语数量。我为此任务使用延迟列表。

for (var id = 0; id < intents_dic.length; id++){
    deferreds.push($.ajax({
    url: 'url',
    type: 'GET',
    success: function(data){
        intents_count += data['templates'].length;
        }
    }))
}
$.when.apply(null, deferreds).done(function() {
    chart_quantity.push(intents_count);
})

但是当延迟的 ajax 请求完成时,完成的顺序与语言列表顺序不同(这是构建图表的主体)。这个问题可以解决,还是ajax调用的一个特性?谢谢。

【问题讨论】:

  • 是的,这是一项功能。
  • 不要使用async:false
  • @Bergi 使用闭包而不是同步请求更好吗?
  • 如果“关闭”是指“异步回调”,那么是的 - 同步请求不过是麻烦。
  • @Bergi 关闭我的意思是这个例子jsfiddle。它允许使用异步调用。

标签: javascript jquery ajax


【解决方案1】:

这是您的分叉,因此可以工作的 jsfiddle(具有有序结果的异步调用)。

for(var i = 0; i < 5; i++){
    setTimeout(function(x){
        done(x,results);
    }(i),1000);
}

http://jsfiddle.net/htuz3t3m/2/

【讨论】:

  • 回调在 jQuery 中很重要。
猜你喜欢
  • 2016-12-01
  • 2023-03-10
  • 2013-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 2015-03-23
  • 1970-01-01
相关资源
最近更新 更多