2017-02-09 80 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請求成功的功能。