2016-02-18 71 views
1

我需要從api中檢索具有返回結果數量限制的數據。使用jQuery進行Ajax分頁

使用找到的結果總數,我可以進行額外的附加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); 
+0

哦。回撥地獄。你不應該在循環中使用ajax。 Ajax是異步承諾。您可以使用關鍵字找到一些想法解決方案:異步瀑布(nodejs異步庫) – Kelvin

回答

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可能是您需要的。

+0

此解決方案運行良好。謝謝! –

1

說實話,如果是我這個API的限制問題,我會使用服務器交談的API不斷所謂經常捕獲所有數據放入我自己的系統 - 拜託MySQL或Redis或其他。然後,我會使用我的前端JS,但我想沒有限制劑