2017-02-09 11 views
-1

私は動的に決定されたajaxコールのリストを1つずつ作成する必要があります。すべてのブラウザで約束が同じように実装されているわけではないため、前回の完了後に各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

再帰を利用できます。 https://jsfiddle.net/b18vo9ds/

あなたはAJAX要求でのsetTimeoutを置き換えることができ、およびAJAX要求の成功の関数を呼び出すresursive:

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); 

デモ(私は、AJAX要求の代わりにsetTimeoutメソッドを使用しました)。

関連する問題