延迟的jQuery Ajax请求顺序

4

我有一个语言列表,['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调用的一个特性?谢谢。


是的,这是一个功能。 - Bergi
不要使用 async:false - Bergi
@Bergi,使用闭包比同步请求更好吗? - Max Rukhlov
如果你所说的“闭包”是指“异步回调”,那么是的——同步请求只会带来麻烦。 - Bergi
@Bergi 闭包指的是这个例子 jsfiddle。它允许使用异步调用。 - Max Rukhlov
1个回答

0

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

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

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


回调函数在jQuery中非常重要。 - Mantisse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接