2015-01-14 94 views
0

我需要計算ajaxes的數量。每個ajax都在裏面運行(但是,我不能使用循環函數的索引)。這裏是我的代碼:計算ajax請求

var i = count = 0, formData, blob; 

for (/*setting the for loop*/) { 
    $.ajax({ 
     xhr: function(){ 
      var xhr = $.ajaxSettings.xhr(); 

      xhr.upload.onprogress = function(evt){ 
       // here I need to count be 0,1,2,3,4... for every ajax 
       console.log('Part'+count+'is being uploaded'); 
      }; 

      return xhr ; 
     }, 
     url: 'upload.php', 
     type: 'POST', 
     data: formData, 
     }, 
    }); 
    count++; 
} 

現在我需要的是獲取信息哪些部分正在上傳。現在它的工作方式是計數總是最後一個ajax的數量(原因很明顯:計數增加了,進度事件還​​沒有被激活)。

那麼有沒有辦法在其他地方增加計數來實現呢?再次,我不能使用for循環的索引。

NOTE:代碼被簡化了,實際的代碼更加複雜。

+0

只是爲了記錄在案,因爲問題是經常閱讀後來被別人太多,有一個額外的',\ n}'接近尾聲。我編輯了缺失的'但編輯其他人的實際代碼時,我不屑編輯該錯誤,我不願意... –

回答

1

你可以用一個封閉做到這一點,保存計數的當前值:

for (/*setting the for loop*/) { 
    $.ajax({ 
     xhr: (// Executing a function with count as currentCount, 
      // then it save the value of count in the returned function (Closure) 
      function(currentCount){ 
      return function(){ 
       var xhr = $.ajaxSettings.xhr(); 

       xhr.upload.onprogress = function(evt){ 
        console.log('Part'+currentCount+'is being uploaded'); // here I need to count be 0,1,2,3,4... for every ajax 
       }; 

       return xhr; 
      }; 
      })(count) 
     , 
     url: 'upload.php', 
     type: 'POST', 
     data: formData, 
     }, 
    }); 
    count++; 
} 
+0

工作就像魅力!謝謝! –