我有一个数据数组(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();
答案 0 :(得分:3)
也许您可以重构服务器端代码,以便它可以接受一个请求并提供一个响应,其中包含您需要的所有数据。这样您就可以在一个线程内按顺序处理数据。
修改强>
回应以下评论:
如果你绝对需要顺序调用,那么你需要递归调用getJSON()
方法。这将保证您的AJAX请求是按顺序分开的。
答案 1 :(得分:0)
我认为在开箱即用的jQuery中没有办法做到这一点。看起来您将不得不在Ajax调用成功时创建一个回调函数,并为数组的每个元素运行它。
答案 2 :(得分:-3)