【问题标题】:DataTables jQuery plugin setting recordsTotal after initial load初始加载后的DataTables jQuery插件设置recordsTotal
【发布时间】:2017-08-02 00:36:00
【问题描述】:

我已经为此搜索了互联网和 SO,但似乎找不到答案...

我有一个相对复杂的查询,它从一个大型数据库返回 50 条记录。此查询作为游标运行,因此速度很快,并且能够在约 20 毫秒内组装 json 并返回数据表。

但是,获取此查询的总记录数比较慢(500 毫秒)。

我希望能够进行并行 ajax 调用,并在数据表已经呈现后设置计数 (recordsCount),以便我可以更快地在屏幕上看到数据。这可能吗?

作为一种解决方法,我正在考虑为我的查询创建一个计数缓存,但如果我能够在获得计数时轻松访问一些客户端代码,这似乎并不理想。

这是我的数据表代码供参考:

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){

    }
  })

【问题讨论】:

    标签: jquery performance datatables


    【解决方案1】:

    这是一个有趣的问题。

    我可以为您提供一个 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

    【讨论】:

    • @Rao,别忘了在原始回复中为recordsTotalrecordsFiltered 返回一些虚拟数字。
    猜你喜欢
    • 2011-11-18
    • 2015-04-08
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 2012-04-05
    • 2020-03-04
    • 1970-01-01
    相关资源
    最近更新 更多