服务器端数据表返回额外的页面

时间:2018-07-25 20:16:13

标签: javascript jquery ajax datatables

当我调用服务器端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可以正确搜索的事实,我认为我的服务器端实现是正确的。但是,我不知道是什么原因导致数据表显示两页而不是一页,每页显示十条记录。

2 个答案:

答案 0 :(得分:1)

希望这可以帮助您理解。

recordsTotal用于显示总记录并为记录数设置分页。数据表具有内部功能,可根据recordsTotal设置分页。

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

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

->不可能recordsDisplay> recordsTotal

答案 1 :(得分:0)

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