DataTables服务器端分页

9

我有一个使用Spring REST实现的带有客户端分页的应用程序,使用默认的DataTables插件,一切都正常。现在我需要将其改为服务器端分页,但我遇到了问题,因为不知道如何从DataTables中获取客户端想要查看哪一页的信息。我在DT手册中找不到任何有用的内容。

2个回答

30

当你说 Datatable 时,我假设你是在谈论 DataTables jQuery 插件。

要激活服务器端分页,您需要传递:

"serverSide": true,

就像这样:

$('#example').DataTable( {
    "processing": true,
    "serverSide": true,
    "ajax": "/your_url"
});

遵循上述步骤将激活您的服务器端分页,但您还需要在服务器端进行一些更改。让我们逐步来看看它们。

1、当您将serverSide标记为true时会发生什么

DataTables插件会向AJAX调用添加自定义参数,其中包含诸如信息。

order:  asc
start:  20
length: 10

// and many more.

当您点击下一页按钮时,可以检查此演示链接,并查看请求中传递的参数。

2. 同样,DataTables插件期望在响应中包含一些字段以保留分页逻辑。

"draw": 3,             // unique ID
"recordsTotal": 57,    // total number of records
"recordsFiltered": 57  // total number of filtered records

您可以检查此演示链接,并查看响应数据。

3.现在更改是在API的服务器端

您需要将这些参数作为queryParam添加到GET和POST调用中的控制器API的属性中:

order: asc
start: 20
length: 10

4. 服务层更改 - 数据库查询

在服务层中,您从数据库获取详细信息。

您需要获取记录的总数,并在搜索查询中传递一个 LIMIT 子句 LIMIT 10, 10(MySQL 的情况下)。

例如:

SELECT * FROM User LIMIT 20,10;

使用startlength计算下一组记录。

它可能会更加棘手,但如果你理解并正确实现它,那就很有趣。

这里详细阅读更多内容,其中还包含代码和实时演示。


非常感谢您的好回答,但是有些地方我还不太清楚。您能告诉我如何获取有关起始位置和长度的信息吗?我只看到示例中更改了绘制编号,但是起始位置和长度的信息在哪里呢?如果问题很简单,请原谅我的无知... - Wolfik
我使用了相同的示例,我可以看到开始和长度信息。它在最后面可用。我不得不向下滚动到最后才能看到开始:10 长度:10 搜索[值]: 搜索[正则表达式]:false - MyTwoCents
@MyTwoCents 感谢您的回答,但是如果我收到的后端响应与“recordsTotal”,“recordsFiltered”,“draw”不具有相同的键名,而是响应中的键名不同,我需要做什么呢? 我们能否手动配置Datatable来解决这个问题?请帮忙。 - Amara
@Amara 参考一下...你不能设置自定义字段,但可以像这样分配带有自定义值的字段 https://dev59.com/2I_ea4cB1Zd3GeqPSsNh - MyTwoCents
非常好的回答。这对我来说很困惑。谢谢! - Bilaal Abdel Hassan

5
请查看有关DataTables服务器端处理的示例: https://datatables.net/examples/server_side/simple.html 在更改页面后,您可以按以下格式捕获对服务器的请求: https://.../server_processing.php?draw=3&columns...&order=0&dir=asc&start=20&length=10&search%5Bvalue%5D=&search%5Bregex%5D=false&_=1534436781912
这表示DataTables请求第3页(draw=3),按第一列升序排序,...
在服务器端(REST),您可以通过(例如)request.getParameter("draw")来获取页码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接