2013-03-22 58 views
1

在一個javascript函數中,我打電話給服務器並獲得10個記錄的批次。我需要這樣做,直到我有所有記錄。在一個while循環中使用帶有ajax調用的分頁

開始我做了一個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; 
    } 
    }); 

感謝您指出我在正確的方向

回答

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/

+0

如何調用getRecord函數。我也在每個ajax調用上調用10條記錄。第一次加載10條記錄,並在滾動頁面之後調用另一條記錄。 – 2017-01-13 09:11:57