2012-02-08 79 views
1

我想要在運行中生成ajax請求,但我想確保在所有完成後都會收到回調,因此我想將它們包裝在。當.done聲明如下所示:

$.when(function(){ 
     $.each(oOptions, function(){ 
      var filePath = this.filePath, 
      dataType = this.dataType; 

      $.ajax({ 
       url : filePath, 
       dataType : dataType 
      }); 
     }); 
    }) 
    .done(function(){ 
     console.log('success'); 

     console.log(arguments); 
    }) 
    .fail(function(){ 
     console.log('failed'); 
    }); 

在我的選擇是包含每個Ajax請求我想同時進行的文件路徑和數據類型對象的數組。這段代碼將返回成功,但參數只是一個函數,並且Ajax請求永遠不會通過。有關如何做到這一點的任何想法?

回答

1

你傳遞一個函數來$.when,而你應通過一個或多個Deferred s。你可以填補deferreds的數組,並傳遞到$.when作爲參數:

。當.done的
var deferreds = []; 

$.each(oOptions, function() { 
    var filePath = this.filePath, 
    dataType = this.dataType; 

    deferreds.push($.ajax({ 
     url : filePath, 
     dataType : dataType 
    })); 
}); 

// use the array elements as arguments using apply 
$.when.apply($, deferreds) 
.done(function(){ 
    console.log('success'); 

    console.log(arguments); 
}) 
.fail(function(){ 
    console.log('failed'); 
}); 
1

難道你不需要把「完成」邏輯放到$ .ajax調用參數中作爲成功函數嗎?我的意思是這樣的:

$.ajax({ 
    url : filePath, 
    dataType : dataType, 
    success: function(){ 
    console.log('success'); 
    } 
}); 

由於Ajax調用異步的,做的()Ajax調用完成之前可以被稱爲...

+0

一個要點是允許回調到所有Ajax請求 – Evan 2012-02-08 15:39:25