2017-07-01 112 views
0

我有一個ajax函數,它在一個循環內部運行並且依賴於數組中的項目數量。如何在ajax調用完成並在循環之外運行另一個函數?可能嗎?jquery在循環完成後調用另一個函數

這是函數

function downloadAll(){ 
    downloads = []; 
    $.each(checked, function(key, value) { 
     $.ajax({ 
      method: "POST", 
      url: "<?php echo site_url($this->data['controller'].'/Download/'); ?>", 
      data:'id='+value, 
      beforeSend: function() { 
       $('.loading').show(); 
      }, 
      success: function(data){ 
       downloads.push(data); 
       $('.loading').fadeOut("slow"); 
      }, 
     }); 
    }); 
    processZip(downloads); 
} 
+1

您可以通過保持一個計數器嘗試和成功的增加,並檢查(反== checkedItemlength)然後調用processZip(下載) – SMA

回答

2

讓我們與啓動所有呼叫succeded後,這是很容易的:

success: function(data){ 
     downloads.push(data); 
     $('.loading').fadeOut("slow"); 
     if(downloads.length===checked.length){//suppose checked is array like 
     alert("finish"); 
     } 
}, 

外循環是比較困難的,因爲它不是一個真正的循環,它需要一些修改。你基本上要等待多承諾(Promise.all):

Promise.all(checked.map(function(value){ 
return Promise(function(resolve){ 
    $.ajax({... ,success:resolve}); 
}); 
})).then(function(downloads){ 
console.log("finished",downloads); 
}); 
+0

哦!我認爲檢查下載長度與檢查的長度匹配很好!謝謝! – JianYA

相關問題