在while循环中使用带有ajax调用的分页

Rud*_*udi 1 javascript jquery pagination

在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;
    }
  });
Run Code Online (Sandbox Code Playgroud)

谢谢你指点我正确的方向

小智 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
  });

}
Run Code Online (Sandbox Code Playgroud)

这仅在您的服务器/ API在不存在更多记录时返回错误时才有效; 然而,这可能不是最好的模式.跟踪异步事件状态的更优雅方式是通过延迟/承诺模式.jQuery有一个很好的实现:http://api.jquery.com/category/deferred-object/