【问题标题】:Serverside DataTables returning extra pages服务器端数据表返回额外页面
【发布时间】:2018-07-25 20:16:13
【问题描述】:

当我调用服务器端 DataTables 搜索时,我得到一个项目,这是 AJAX 调用的响应:

{draw: 1, recordsTotal: 1, recordsFiltered: 18,…}
 data: [{...}]
 draw: 1
 recordsFiltered: 18
 recordsTotal: 1

并且 DataTables 认识到这一点:

Showing 1 to 10 of 18 entries (filtered from 1 total entries)

这是我当前的配置(我目前正在使用流水线,如下所述:https://datatables.net/examples/server_side/pipeline.html

var table = $('#table').DataTable({
    "processing": true,
    "serverSide": true,
    "ajax": $.fn.dataTable.pipeline({
        url: '/url',
        pages: 5 // number of pages to cache,
    }),
    "pagingType": "full_numbers",
    "columns": columnData,
    "order": [[1, "desc"]]
});

当我在 Chrome 浏览器控制台中调用 table.page.info() 时,我得到了

{page: 0, pages: 2, start: 0, end: 10, length: 10, …}
end: 10
length: 10
page: 0
pages: 2
recordsDisplay: 18
recordsTotal: 1
serverSide: true
start: 0

根据前面的信息和Datatables正确搜索的事实,我认为我的服务器端实现是正确的。但是,我不知道是什么导致 Datatables 显示两页而不是每页显示 10 条记录。

【问题讨论】:

  • recordsDisplay > totalRecords 怎么办?
  • 谢谢,这就是问题所在!
  • 嗨@AnimalTesting,我添加了答案。如果有帮助,请点赞。

标签: javascript jquery ajax datatables


【解决方案1】:

希望这能帮助你理解。

recordsTotal 用于显示总记录并设置记录数的分页。 Datatable 具有基于recordsTotal 设置分页的内部功能。

recordsDisplay 用于在特定页面上显示记录。

当您单击分页时,对于服务器端它会获取新的基于长度和偏移量的记录。
所以,您的代码中的问题是您的 recordsDisplay 是 18,而 recordsTotal 是 1。这是不可能的。

--> recordsDisplay > recordsTotal 永远不可能。

【讨论】:

    【解决方案2】:

    在重新检查服务器端代码后,在yash的注释的帮助下,我意识到我切换了recordsTotalrecordsDisplay的返回值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多