使用iTotalRecords和iTotalDisplayRecords进行过滤似乎不适用于分页和表格显示长度
这是我的数据表js代码:
transTable.dataTable({
"aaSorting": [[0,"desc"]],
"sPaginationType": "full_numbers",
"bJQueryUI": true,
"aLengthMenu": [[10, 25, 50, 100, 200, -1], [10, 25, 50, 100, 200, "All"]],
"iDisplayLength": 10,
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": "",
"sServerMethod": "POST"
"aoColumns": [
{ "mData": "datetime"},
{ "mData": "trans"},
{ "mData": "type"}
]
});
当我第一次加载JSON(只是POST到同一页面)时,分页工作并正确显示,排序也是如此。我每页的默认显示为10。
但是,当我使用搜索框过滤时,相关的POST参数是:
{ ...
iDisplayStart: 0
iDisplayLength: 10
sSearch: searchText
...
}
SQL查询运行是:
SELECT
*
FROM
trans
WHERE
(type LIKE "%searchText%") OR
(trans_id LIKE "%searchText%") OR
(datetime LIKE "%searchText%")
ORDER BY "datetime" DESC
LIMIT 10 -- 0 is iDisplayStart so no OFFEST set here and 10 is iDisplayLength
我的json回应是这样的:
{
'aaData': [the query result rows],
'iTotalRecords: 10000, //total number of records in the table
'iTotalDisplayRecords: 10,
'sEcho': //POST params "sEcho" value
}
因为查询上有一个LIMIT 10,iTotalDisplayRecords将为10。
你会认为分页会说"显示1,234的1到10条记录(从10,000过滤掉)并允许通过1,234条记录(123页)进行分页。但不是。它说:"显示1到10个10,000"没有分页。
如果我摆脱iDisplayLength,分页文本看起来正确并且分页正常,但是表格显示所有1,234条记录,而不仅仅是10条。
我做错了什么?
答案 0 :(得分:0)
IIRC,iTotalDisplayRecords应该是过滤集合中记录的数量(1,234)。
我通过在我的sql中使用输出参数设置我的分页数据表来计算我的数据库中的记录总数(10,000)和过滤结果的数量(1,234)然后在我的json中传递(与数据和抽奖数量分别为iTotalRecords和iTotalDisplayRecords。