2016-07-27 64 views
0

我有一次多個ajax調用。一旦他們所有完成,我需要將用戶重定向到另一個頁面。等待一個Ajax調用的數組來完成

隨着this答案的幫助下,我創造了這個:

function verifyAll() { 
    var ajaxCalls = []; 
    $.each($('.thing'), function(index, thing) { 
     ajaxCalls.push(verifyOne($(thing).data('id')); 
    }); 

    $.when(ajaxCalls).done(function() { 
     console.log('Done verifying all'); 
    }); 
} 

function verifyOne(id) { 
    return $.ajax({ 
     type: 'GET', 
     url: 'verify.html' 
    }).done(function(data) { 
     console.log('Done verifying one'); 
     //do something 
    }); 
} 

然而,$.when().done()功能被稱爲.done()之前,呼籲個人阿賈克斯。有什麼我做錯了,還是有另一種方法來實現我的最終目標?

+0

使用'$ .when'通過它的異步函數 –

+0

公告的傳遞deferreds的陣列,以您的代碼之間的差值的陣列'當'和鏈接的代碼,通過一些參數 - 這是相關的 – Jamiec

回答

2

$.when()不支持直接陣列

嘗試

$.when.apply($, ajaxCalls).done(function() { 

    console.log('Done verifying all'); 
    console.log(arguments); 
}); 
+0

或只是'$ .when(... ajaxCalls)'如果你有訪問ES6擴展運算符。 – MinusFour

+1

@MinusFour在這裏不起作用,因爲在定義函數定義中的參數時使用了其餘的運算符,而不是在調用函數時使用 –

+0

您必須看到我的舊評論。我立即將其改爲「傳播」。 – MinusFour