如何判断多个函数何时完成jQuery延迟

我有3个函数处理从AJAX中提取的数据,它们在调用ajax函数后更新页面。

当调用AJAX函数时,我显示了一个加载器,我希望在AJAX完成并且函数完成后隐藏加载器。

我怎样才能使用deferred with when然后在jQuery中测试所有3个函数完成后。

这是我的AJAX代码,此时隐藏了AJAX成功的加载器,理想情况下,这将是在3个function完成/成功之后。

3个函数接收要处理和显示在页面上的数据,它们不是AJAX函数。

function setUpStocking() { $.ajax({ url: url, cache: false, beforeSend: function(){ // Show loader $('.loader').show(); }, success: function(data){ updateMyList(data.gifts); updateRecievedGift(data.recieved); updateGiftsOpenedToday(data.opened); // Hide loader $('.loader').hide(); } }); } 

这些函数在AJAX函数之外:

 function updateMyList(gifts) { // Get data, process it and add it to page } function updateRecievedGift(recieved) { // Get data, process it and add it to page } function updateGiftsOpenedToday(opened) { // Get data, process it and add it to page } 

您需要首先使每个函数返回jQuery在您发出AJAX请求时提供的延迟对象。 然后你可以把它们放到一个数组中,然后将它应用到$.when() 。 像这样的东西:

 var deferreds = []; $.ajax({ url: url, cache: false, beforeSend: function(){ // Show loader $('.loader').show(); }, success: function(data){ deferreds.push(updateMyList(data.gifts)); deferreds.push(updateRecievedGift(data.recieved)); deferreds.push(updateGiftsOpenedToday(data.opened)); $.when.apply(deferreds).done(function() { // Hide loader $('.loader').hide(); }); } });