为啥服务器端分页不适用于我的 jquery 数据表?
Posted
技术标签:
【中文标题】为啥服务器端分页不适用于我的 jquery 数据表?【英文标题】:Why doesn't server side pagination works for my jquery datatables table?为什么服务器端分页不适用于我的 jquery 数据表? 【发布时间】:2015-03-31 10:47:44 【问题描述】:我正在尝试使服务器端分页工作,但它不起作用。我一直在寻找解决问题的方法,但我发现的一切都与我所拥有的几乎相同,这是行不通的。
我可能在这里遗漏了一些明显的东西,我没有使用过好的数据表,而且我发现它的说明和示例有点太混乱了。
这是我的 javascript 代码 - 它是作为内联 Javascript 代码从 php 文件中打印出来的,所以为了简洁起见,我不得不替换 PHP 部分:
var display_start = 1;
var display_length = 10;
$( '#andrux' ).dataTable(
'sPaginationType': 'full_numbers',
'processing': true,
'serverSide': true,
'bSort': false,
'ajax': '/bp-subgroups.php?group=3&iDisplayStart=' + display_start + '&iDisplayLength=' + display_length
);
根据我看到的示例,我什至不应该将 iDisplayStart 或 iDisplayLength 变量附加到我的请求中,但这是我没有将完整的记录加载到我的表中的唯一方法。
我知道在这种情况下会发生什么,我总是在我的请求中发送 1 和 10 作为显示开始和显示长度,我想问题应该是,如何根据我所在的页面保持更新?它们不应该随着每个请求自动更新吗?
这是我从 PHP 代码发送的输出:
$output = array(
"sEcho" => intval( $_GET['sEcho'] ),
"iTotalRecords" => $iTotal,
"iTotalDisplayRecords" => $iTotal,
"aaData" => array()
);
当然 aaData 正在加载我的行,为简洁起见,我只包括上面的内容,另外,我可以很好地看到数据,我只是不能让它分页。
有经验的人可以看出我做错了什么吗?
这已经让我发疯了,但我不想为此使用其他插件,我不喜欢放弃!
谢谢大家。
【问题讨论】:
【参考方案1】:好吧,既然没有人试一试,我只好用尽我所有的资源自己寻找解决方案。
答案在这里:http://www.datatables.net/examples/data_sources/server_side.html
在“服务器端脚本”选项卡的最底部,它们包括 SSP 类。因为我在这里使用 WordPress,所以我错误地认为我不需要那个类,因为我的查询是通过 $wpdb 或其他 WP 核心函数进行的,另外,我正在阅读所有在线文档,甚至没有考虑查看那堂课 - 如果我按照应该工作的其余说明进行操作,我为什么要这样做。
长话短说,我对 SSP 类进行了一些修改以满足我的需要,然后使用与示例页面几乎相同的设置,最后让我的数据表正确分页。
作为参考,我试图将如下数组返回给数据表:
array(
"sEcho" => intval( $_GET['sEcho'] ),
"iTotalRecords" => $iTotal,
"iTotalDisplayRecords" => $iTotal,
"aaData" => $my_data
);
结果我需要像这样返回数组:
array(
"draw" => intval( $request['draw'] ),
"recordsTotal" => intval( $recordsTotal ),
"recordsFiltered" => intval( $recordsFiltered ),
"data" => $my_data
);
可能只有我一个人,但数据表虽然是一个不错的工作插件,但确实需要在文档上做更多的工作。我发现一些参数在一个地方以一种方式找到,而在其他地方以另一种方式找到 - 就像上面的示例一样。
【讨论】:
dataTables 期望的服务器响应的结构记录在这里:datatables.net/manual/server-side。底部有一个有用的注释,有人解释了如果您需要更改进出服务器的 JSON 时使用哪些方法(ajax.data 和 ajax.dataFilter)。以上是关于为啥服务器端分页不适用于我的 jquery 数据表?的主要内容,如果未能解决你的问题,请参考以下文章