1. 程式人生 > >Ajax順序執行

Ajax順序執行

ror ajax 不能 error gpo pan 為我 又能 erro

循環中的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,但事實控制臺輸出了55

因為ajax是異步請求,for循環會瞬間執行完,此時ajax還沒有正確的返回數據。

實例二代碼:

for(var i = 0;i<5;i++){
(function (i) {
$.ajax({
url : ‘‘,
data : {},
type:‘GET‘,
dataType : ‘jsonp‘,
success: function

(res){
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

(res){
alert(‘ok‘);
},
error : function () {
currentIndex++;
console.log(currentIndex);
a();
}
});
}
a();

由於我們並不知道會有多少請求發送,所以以遞歸的形式循環,既能循環najax請求,又能保證數據返回的順序。

Ajax順序執行