1

在一个 javascript 函数中,我调用服务器并获取 10 条记录的批次。我需要这样做,直到我有所有的记录。

首先我做了一个while循环,在ajax调用的错误回调中我将结束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 回答