Ajax順序執行
循環中的Ajax
在前後端分離的項目中,Ajax是連接前後端的樞紐。
需求:有一個需要循環發起n次的請求,但是n次循環傳參不同,我並不知道n是多少,並且要求能夠保證返回順序。JSONP用同步鎖無效
示例一代碼:
for(var i = 0;i<5;i++){
$.ajax({
url : ‘‘,
data : {},
type:‘GET‘,
dataType : ‘jsonp‘,
success: function(res){
console.log(‘ok‘);
},
error : function
console.log(i);
}
});
}
這個時候由於url為空,走error方法,我們想要輸出12345,但事實控制臺輸出了5次5。
因為ajax是異步請求,for循環會瞬間執行完,此時ajax還沒有正確的返回數據。
實例二代碼:
for(var i = 0;i<5;i++){
(function (i) {
$.ajax({
url : ‘‘,
data : {},
type:‘GET‘,
dataType : ‘jsonp‘,
success: function
console.log(‘ok‘);
},
error : function () {
console.log(i);
}
})
})(i)
}
想利用閉包的方式傳值,這時候輸出結果012345不定排序,並不是按照我想要的順序返回,因為我們不能確定哪個AJAX請求是先返回的。
示例三代碼:
var currentIndex = 0;
function a(){
if(currentIndex >= 5){
return;
}
$.ajax({
url : ‘‘,
data : {},
type:‘GET‘,
dataType : ‘jsonp‘,
success: function
alert(‘ok‘);
},
error : function () {
currentIndex++;
console.log(currentIndex);
a();
}
});
}
a();
由於我們並不知道會有多少請求發送,所以以遞歸的形式循環,既能循環n次ajax請求,又能保證數據返回的順序。
Ajax順序執行