這個标題看起來有點兒拗口,說白就是,在for循環中使用ajax的異步同步資料時,如何按照給定資料的先後順序去執行呢?使用的是jquery的Deferred,具體代碼如下:
var data = ['one','two','three','four','five','six','seven','eight'];
var defer = $.Deferred();
//這一步必須要寫,要不然下面的then無法使用
defer.resolve($("#showContent").append("這個裡面可以什麼都不寫<br/>"));
$.each(data,function(i,e){
defer = defer.then(function () {
return $.ajax({
url:'/echo/json/',
method:'get',
beforeSend:function(){
$("#showContent").append(e + "開始數數<br/>");
},
success:function(data){
$("#showContent").append(e + "執行完成<br/>");
//如果傳回的結果有問題,這裡可以用return false退出循環
}
})
});
});
defer.done(function(){
$("#showContent").append("ajax全部執行完成<br/>")
});
通過上面的例子可以很好的看到,程式是按照數組的順序執行的,這樣即用到了異步,而且還保證了執行順序,不錯的方法。