使用jQuery进行Ajax分页

时间:2016-02-18 04:01:10

标签: javascript jquery json ajax api

我需要从api中检索数据,该数据对返回的结果数量有限制。

使用找到的结果总数,我可以进行额外的额外ajax调用,直到检索到所有数据。但是,我需要按字母顺序对所有数据进行排序,然后再将其显示在页面上。

在成功完成所有ajax调用后,如何访问数组中的数据?

这是我到目前为止所做的:

var mydata = [];

function loadPosts() {

  var api = 'http://someurl.com';

  $.ajax({
    url: api,
    dataType: 'jsonp',
    data: {
      rows: 1,
    },
    success: function(data) {
      totalNumberOfRecords = data.numFound;

      for (var start = 0; start < totalNumberOfRecords; start += rows) {
        $.ajax({
          url: api,
          dataType: 'jsonp',
          data: {
            'rows': rows,
            'start': start,
          },
          success: function(data) {
            $.each(data.namesList, function(index, item) {
              mydata.push(item.firstName);
            });
          },
        });
      }
    },
  });
}

console.log(mydata);

2 个答案:

答案 0 :(得分:1)

老实说,如果我有这个API限制问题,我会经常使用服务器与API通信,以便将所有数据捕获到我自己的系统中 - 比如MySQL或Redis等等。然后我会使用我的前端JS,但我想要没有限制

答案 1 :(得分:1)

这是一种即食面条解决方案。

var numOfAjax = 0;
var numOfResolvedAjax = 0;
for (var start = 0; start < totalNumberOfRecords; start += rows) {
    numOfAjax++;
    $.ajax({
        url: api,
        dataType: 'jsonp',
        data: {
            'rows': rows,
            'start': start,
        },
        success: function(data) {
            $.each(data.namesList, function(index, item) {
                mydata.push(item.firstName);
            });
            numOfResolvedAjax++;

            // Check if all ajax request has been responded to sort the result.
            if (numOfResolvedAjax === numOfAjax) {
                sortMyData(myData);
            }
        },
    });
}

要获得完美的解决方案,请在async库中查看可以帮助您的许多功能。例如:async.parallel可能就是您所需要的。