1

JavaScript 関数でサーバーを呼び出し、10 レコードのバッチを取得します。すべての記録が揃うまでこれを行う必要があります。

まず、ajax 呼び出しのエラー コールバックで while ループを終了する while ループを作成しました。

途中で、ajax呼び出しが非同期であるため、ループ内で大量のリクエストを発生させるため、それが機能しないことに気付き始めました。これを行うための標準的なパターンがあると確信していますが、方法がわかりません。

呼び出しがエラーを返さない限り、ループ内で ajax 呼び出しを実行するにはどうすればよいですか? 私が構築していた疑似コード:

var stillRecordsAvailable = true;

while (stillRecordsAvailable) {
  // get the next batch of records
  $.ajax({
    url: '/getrecords.json',
    data: {data_set_id: dataset.id},
    type: 'GET',
    success: function(data, textStatus, xhr) {
      // do something
    },
    error: function(xhr, textStatus, errorThrown) {
      // nothing left to do
      stillRecordsAvailable = false;
    }
  });

正しい方向に向けてくれてありがとう

4

1 に答える 1

5

おそらく、ajax 成功コールバックで呼び出される関数で ajax 呼び出しをラップするだけで済みます。

function getRecords(data, textStatus, xhr) {

  if (data) {}; // do something...

  $.ajax({
    url: '/getrecords.json',
     data: {data_set_id: dataset.id},
     type: 'GET',
     success: getRecords
  });

}

これは、サーバー/API がレコードが存在しないときにエラーを返す場合にのみ機能します。ただし、これは最適なパターンではない可能性があります。非同期イベントの状態を追跡するより洗練された方法は、遅延/約束パターンを使用することです。jQuery には優れた実装があります: http://api.jquery.com/category/deferred-object/

于 2013-03-22T16:22:36.127 に答える