2016-11-22 3 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呼び出しが完了しているか、少なくとも特定のセットであるかどうかを調べてテストする方法があることを望みます。何かのように if(ajaxComplete == true){ // do something } 私は完全に何かが欠けているかもしれませんが –

答えて

2

遅延オブジェクトの配列を作成するためにループを使用できます。その配列を$.whenに適用し、load()メソッドを呼び出すことができます。より良い方法は、完全にあなたのupdate_members.phpvalueの配列を取得し、単一のAJAX呼び出しを行うために変更するだろうと

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'); 
}); 

注:これを試してみてください。

+0

これはありがとう、これは動作するようです! –

関連する問題