有没有办法强制一组jquery ajax调用进入队列?

时间:2010-08-06 13:51:11

标签: jquery ajax queue

我有一个数据数组(arrData),我循环(10个元素),在每个上调用ajax请求。目前,每个ajax调用都是并行进行的。这意味着服务器一次接收10个调用,并按照每个计算的顺序发送回数据。为了稍微减轻服务器的负担,我现在要对我的呼叫进行排队。因此,当ajax接收到一组数据时,它会调用下一个查找。有没有办法在jquery中内置这个方法,或者我应该破解我的循环并为每个循环添加一个递归回调?

$.each(arrData, function(k,v) {
    $.getJSON(lookupPath,
        { key:k, val:v },
        function(data) {
            console.log(data); //loopback here?
        }
    );
});

更新:我选择以下内容(由Scott M.建议)完成此任务:

function doLookup() {
    if(k < arrData.length) {
        var v = arrData[k];
        $.getJSON(lookupPath,
            { key:k, val:v },
            function(data) {
                console.log(data);
                k++;
                doLookup();
            }
        );
    }
}

var k = 0;
doLookup();

3 个答案:

答案 0 :(得分:3)

也许您可以重构服务器端代码,以便它可以接受一个请求并提供一个响应,其中包含您需要的所有数据。这样您就可以在一个线程内按顺序处理数据。

修改

回应以下评论:

如果你绝对需要顺序调用,那么你需要递归调用getJSON()方法。这将保证您的AJAX请求是按顺序分开的。

答案 1 :(得分:0)

我认为在开箱即用的jQuery中没有办法做到这一点。看起来您将不得不在Ajax调用成功时创建一个回调函数,并为数组的每个元素运行它。

答案 2 :(得分:-3)

jQuery中的ajax有一个选项可以启用同步模式。

$.ajax({async: false});

http://api.jquery.com/jQuery.ajax/