2017-08-02 47 views
1

我已經沖刷互聯網,因此,對於這個,但似乎無法找到答案...數據表jQuery插件初始加載後設置recordsTotal

我有一個從大返回50條記錄一項相對複雜的查詢數據庫。該查詢作爲遊標運行,因此速度很快,能夠組裝json並在〜20ms內返回到數據表。

但是,獲取此查詢記錄的總計數較慢(500毫秒)。

我希望能夠做一個並行的Ajax調用,並設置我的數據表上的計數(recordsCount)後,它已經呈現,所以我可以更快地看到屏幕上的數據。這可能嗎?

作爲一種解決方法,我正在考慮爲我的查詢創建一個計數緩存,但如果我能夠輕鬆地打到某些客戶端代碼時,這看起來並不理想。

這裏是我的DataTable參考代碼:

var table = $('#myTable').DataTable({ 
    "dom": '<"top"iflp<"clear">>rt<"bottom"iflp<"clear">>', 
    "processing": true, 
    "serverSide": true, 
    "searching": false, 
    "ordering": false, 
    "bSort": false, 
    "scrollX": false, 
    "fixedHeader": true, 
    "deferRender": true, 
    "iDisplayStart": (startPage * pageLength), 
    "ajax": { 
     "url": url, 
     "type": "POST", 
     "data": function (d) { 

     } 
    }, 
    "pagingType": "full_numbers", 
    "columnDefs": columnDefs, 
    "responsive": false, 
    "columns": columnDataStructure, 
    "order": [[0, "desc"]], 
    "lengthMenu": [10,25,50,100], 
    "initComplete": function(settings, json){ 

    } 
    }) 

回答

0

這是一個有趣的問題。

我可以爲您提供一個hacky的方式來做到這一點。它應該適用於DataTables 1.10.x.

附加以下事件處理程序,當DataTables向服務器端腳本發出Ajax請求時將調用該事件處理程序。

調用另一個服務器端方法(在我的示例中爲/echo/json/)並檢索總記錄數。

然後使用某些內部未記錄的函數更新DataTables。

$('#example').on('xhr.dt', function (e, settings, json, xhr) { 
    $.ajax({ 
     url: '/echo/json/', 
     method: 'POST', 
     data: { json: JSON.stringify({ recordsTotal: 999 }) }, 
     type: 'json' 
    }) 
    .done(function(json){ 
     settings._iRecordsDisplay = json.recordsTotal; 
     settings._iRecordsTotal = json.recordsTotal;  
     $.fn.dataTable.ext.internal._fnCallbackFire(settings, 'aoDrawCallback', 'draw', [settings]); 
    }); 
}); 

請參閱this example的代碼和演示。

+0

哇。這工作!非常感謝Gyrocode.com! – Rao

+0

@Rao,別忘了在原始響應中爲'recordsTotal'和'recordsFiltered'返回一些虛擬數字。 –

相關問題