我正在开发一个需要以顺序方式处理ajax调用的项目。我的代码是这样的:
for(var j=0; j<3;j++) {
$.ajax({
url:url[j],
async:false
}).done(function(result){
var data = result.data;
for(var i=0; i < data.length;i++){
analyses += "<div><div id=\"" + data[i] + "\" class=\"module\">";
analyses += "<br/>Analysis : " + data[i] + "<br/>";
analyses += "</div></div>";
$("#analysesPlaceHolder").html(analyses);
}
});
}
然而,现在它只是从列表中随机选择url(有时它是第一个,有时它不是)。如何使执行顺序执行,以便代码首先执行第一个ajax调用,然后执行第二个等等。
答案 0 :(得分:0)
我不建议在循环中使用ajax调用。
这是一种更好的方法,它会增加ajax回调中的计数,然后触发下一个ajax请求:
var urlCount = 0;
var makeAjaxCall = function(count) {
$.ajax({
url:url[count],
}).done(function(result){
var data = result.data;
for(var i=0; i < data.length;i++){
analyses += "<div><div id=\"" + data[i] + "\" class=\"module\">";
analyses += "<br/>Analysis : " + data[i] + "<br/>";
analyses += "</div></div>";
$("#analysesPlaceHolder").html(analyses);
}
urlCount++;
if (urlCount < 3) {
makeAjaxCall(urlCount);
}
});
}
makeAjaxCall(urlCount);
您也可以使用promises链接ajax调用,如上面的评论中所述。