为啥服务器端分页不适用于我的 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 数据表?的主要内容,如果未能解决你的问题,请参考以下文章

零配置jQuery Datatable默认分页不适用于大表

使用 Jquery 获取服务器端分页

JQuery DataTables 服务器端分页

带有后端分页的 jQuery 数据表

在服务器端分页上防止来自 jquery 数据表的多个 ajax 调用

jquery数据表服务器端分页不起作用