2

重複の可能性:
each()関数内での複数のajax呼び出し..すべてが終了したら、何かを実行しますか?

forループでajaxを実行した後、関数を実行するにはどうすればよいですか。ここでの例では、このajaxをループで実行しています。

for (var countDevice = 0; countDevice<32; countDevice++){
  var dataString="modbus="+(countDevice+1)+"_"+newDate+".xml";
  $.ajax({
    type: "POST",
    url: "CalculateTable",
    data: dataString,
    dataType: "json", 
    //if received a response from the server
    success: function( device, textStatus, jqXHR) {
     //Do something                                 
    }
  });
}

上記のforループが終了した後でのみ、この関数を以下で実行するようにします。

function drawTable(){
  //Do something
}

誰かがそれを可能にする方法について何かアイデアを与えることができますか?読んで答えてくれてありがとう。

4

3 に答える 3

2

直線的に実行したい場合は、次のようにコードを書くことができます

var countDevice = 0;
(function CountDeviceLoop() {
  if (countDevice == 32) {
    // you can place draw table here or .....
    // drawTable();
    return;
  }

  var dataString="modbus="+(countDevice+1)+"_"+newDate+".xml";
  $.ajax({
    type: "POST",
    url: "CalculateTable",
    data: dataString,
    dataType: "json", 
    //if received a response from the server
    success: function( device, textStatus, jqXHR) {
      //Do something


      //after done sth
      countDevice ++;
      CountDeviceLoop();                             
    }
  });
})();

// here
// drawTable();

ajaxメソッドは非同期であるため、この方法でループを実行できます...または、「forループ」を使用してプログラムを実行したい場合は、@ MadSkunkのコードを使用できます

于 2012-12-26T06:29:18.703 に答える
0
for (var countDevice = 0; countDevice<=32; countDevice++)
{
if (countDevice == 32)
{
drawTable();
}
else {
var dataString="modbus="+(countDevice+1)+"_"+newDate+".xml";
$.ajax({
type: "POST",
url: "CalculateTable",
data: dataString,
dataType: "json",

//if received a response from the server
success: function( device, textStatus, jqXHR) {
//Do something
}
});
}
}
于 2012-12-26T05:01:31.570 に答える
-1

Yooも試すことができます

$('your selector').ajaxComplete(function() {
  drawTable();
}); 
于 2012-12-26T05:01:10.640 に答える