天天看點

【jQuery】解決在循環中使用ajax異步時,資料的同步問題

這個标題看起來有點兒拗口,說白就是,在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/>")
});
           

通過上面的例子可以很好的看到,程式是按照數組的順序執行的,這樣即用到了異步,而且還保證了執行順序,不錯的方法。

繼續閱讀