按顺序运行ajax调用

时间:2017-02-09 20:04:28

标签: jquery ajax promise

我有一个动态确定的ajax调用列表,需要一个接一个地进行。由于承诺并未在所有浏览器中同等实施,有没有办法在上一次完成之后进行每次ajax调用?

我试过了:

var favoritesArray = [1,2,3] //dynamically created by user
var arrayOfCalls = $.each(favoritesArray, function each(idx) {
  var favId = favoritesArray[idx];
  return $.ajax({ url: '/favorites/' + favId, type: 'DELETE' });
});
$.when(arrayOfCalls)
.then(function success() {
  doStuff();
});

所有通话都在运行,但不要等待前一通话结束。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

您可以使用递归。 (我使用setTimeout代替AJAX请求)

function syncExecute(index,length){
 var favId = favoritesArray[index];
 setTimeout(function(){
if(index<length){
      syncExecute(index+1,length);
            console.log(index);
      }else{
      console.log("All Call Executed");
      }
},5000);

}

syncExecute(0,favoritesArray.length);

演示:https://jsfiddle.net/b18vo9ds/

你可以用AJAX请求替换setTimeout,并且在AJAX请求成功时调用该函数。