2013-10-01 130 views
3

我想知道是否有可能在ajax調用數組中的所有請求完成時返回$ .when.apply($,Requests [])調用的結果?

我用:

$.when($.ajax(...)).done(function(data){ console.log(data.d); } 

,它可以讓我用AJAX調用的結果工作。如何將相同的概念應用於$ .when.apply($,Requests [])?我嘗試過$.when.apply($, Requests[]).then(function(data?){ console.log(data.d); },但這不起作用。有任何想法嗎?

基本上,我試圖運行可變數量的類似ajax調用,並且一旦所有這些調用完成,就使用它們的結果。我將不勝感激任何正確方向的提示!

編輯:澄清 我設置Requests []作爲一個數組持有ajax請求。例如:

var Requests = []; 
for (var i = 0; i <= 10; i++){ Requests.push($.ajax({...ajax setup...})); 
$.when.apply($, Requests).then(function(...){ do Stuff with the result of all }); 
+0

@KevinB它看起來像jqxhr對象的數組 –

+0

@KevinB我想更新清楚 –

+0

我增加了函數內部澄清它是一個數組。我編輯了我的問題。謝謝! –

回答

5

then回調根據傳遞給它的promise的數量接收可變數量的參數。

在這種情況下,由於傳遞了ajax承諾,每個參數都是一個包含3項數據,狀態和jqxhr對象的數組。

因此,您需要使用bellow語法來獲取第一個請求的結果。

then(function(result1){ 
    console.log(result[0].d) 
}) 

打印所有請求的結果

then(function (result1) { 
    $.each(arguments, function (idx, args) { 
     console.log(args[0]);// in your case args[0].d 
    }) 
}) 

演示:Fiddle

+0

完美,這是一個非常乾淨和工作的解決方案!非常感激! –