2016-11-22 108 views
0

我有jQuery .each循環遍歷數組。對於數組中的每個項目,它都會執行AJAX調用。當所有的AJAX調用完成後,我想用​​方法重新加載部分頁面。但是,如果我使用.ajaxStop()方法,則會產生無限循環。所有其他AJAX調用完成後的jQuery加載函數

我該如何做到這一點?下面

代碼...

這是當按鈕被點擊

$.each(remMems, function(index, value) { 
     $.ajax({ 
      url: 'components/update_members.php', 
      type: 'POST', 
      data: {'memberbadge':value, 'function':'removemember'}, 
      timeout: 6000 
     }); //end ajax call 

     //if its the last item, then refresh the area 
     if (index == lastitem) { 
      refreshMembers(); 
     } 
    }); //end the for each loop 

的一部分,這是調用的時候,每一次循環結束,刷新的部分的方法/函數頁面

function refreshMembers() { 
    $('#listwrapper').load('members.php' + ' #ert_members'); 
}; 
+0

您是否使用超時作爲確保ajax調用完成的方式? – user2085143

+0

我會的,但我不知道它可能需要多長時間......它可能需要500毫秒或可能需要10秒(或可能更長)。 所以我希望有一種方法來查看和測試所有ajax調用是否完成或至少是一個特定的集合。像 如果(ajaxComplete == true){ //做些什麼 } 我可能完全失去了一些東西 –

回答

2

你可以使用你的循環來創建一個延遲對象數組。然後,您可以將該數組應用於$.when並調用load()方法。試試這個:

var requests = []; 
$.each(remMems, function(index, value) { 
    requests.push($.ajax({ 
     url: 'components/update_members.php', 
     type: 'POST', 
     data: { 
      'memberbadge': value, 
      'function': 'removemember' 
     }, 
     timeout: 6000 
    })); 
}); 

$.when.apply($, requests).done(function() { 
    $('#listwrapper').load('members.php #ert_members'); 
}); 

需要注意的是一個更好的方法,完全是修改update_members.php採取的value數組,只能使一個AJAX調用。

+0

謝謝你,這似乎工作! –

相關問題