2017-02-09 57 views
-1

我有一个需要一个接一个地动态确定的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(); 
}); 

的所有调用运行,但不等待前一个完成。有没有办法做到这一点?

+0

不知道为什么你担心它。这些似乎都不依赖于以前的。 '$ .when'将是一致的跨浏览器,但请注意,没有任何东西会从'$ .each'返回,所以'arrayOfCalls'将不确定 – charlietfl

+0

每个调用都会更新同一个列表,如果同时触发调用,则剩下的项目清单将不正确且不同,具体取决于首先完成的清单。 – ebbishop

+0

感谢关于$ .each的说明。 – ebbishop

回答

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和resursive呼吁AJAX请求成功的功能。