数据表服务器端处理分页问题
Datatables server side processing pagination issue
我正在努力让数据table与我的休息API一起发挥良好的作用。让我先说明一下:“REST api 不会更改!.
当使用服务器端处理时,datatables 想要发送特定的查询参数并期望返回特定的格式。对我来说,这是公牛。没有人愿意修改他们的后端以匹配第三方库的约定(尽管我想,提供默认值很棒)。
我已经像这样设置了 table:
{
"processing": true,
"serverSide": true,
"ajax": {
"url": "/api/customers/",
"dataSrc": "results",
"data": function (data, settings) {
// Modify query parameters to match my API
data.page = ...
data.page_size = ...
return data
}
},
...
}
如您所知,我已经使用 ajax.data
属性 来控制 table 来自 API 的请求。这很棒。奇迹般有效。当响应returns时,它看起来像这样
{
"count": 85,
"next": "http://myurl.com/?page=2",
"previous": null,
"results": [
... // The actual data
]
}
从我的配置中,您可以看出我使用 ajax.dataSrc
让 table 获取 results
属性,但我找不到任何文档关于如何从我的回复中获取分页信息。我尝试将我的配置修改为
{
...
"ajax": {
"url": "/api/customers/",
"dataSrc": function(data) {
return {
recordsTotal: data.count,
recordsFiltered: ...,
data: data.results,
...
}
},
...
},
...
}
但这只是引发了一个错误。好像不行。。。那怎么办呢?
您是对的 - 使用 ajax.dataSrc
选项是不可能的。它告诉 DataTables 从哪里获取行数据(在您的示例中为 data.results
),但是无法使用 ajax.dataSrc
告诉它从哪里获取 recordsTotal
等
为此,您需要将 ajax
选项用作函数 - 使您的 Ajax 调用和 return 成为一个对象。基本上与您已经在做的类似,但您也调用 $.ajax
。
我正在努力让数据table与我的休息API一起发挥良好的作用。让我先说明一下:“REST api 不会更改!.
当使用服务器端处理时,datatables 想要发送特定的查询参数并期望返回特定的格式。对我来说,这是公牛。没有人愿意修改他们的后端以匹配第三方库的约定(尽管我想,提供默认值很棒)。
我已经像这样设置了 table:
{
"processing": true,
"serverSide": true,
"ajax": {
"url": "/api/customers/",
"dataSrc": "results",
"data": function (data, settings) {
// Modify query parameters to match my API
data.page = ...
data.page_size = ...
return data
}
},
...
}
如您所知,我已经使用 ajax.data
属性 来控制 table 来自 API 的请求。这很棒。奇迹般有效。当响应returns时,它看起来像这样
{
"count": 85,
"next": "http://myurl.com/?page=2",
"previous": null,
"results": [
... // The actual data
]
}
从我的配置中,您可以看出我使用 ajax.dataSrc
让 table 获取 results
属性,但我找不到任何文档关于如何从我的回复中获取分页信息。我尝试将我的配置修改为
{
...
"ajax": {
"url": "/api/customers/",
"dataSrc": function(data) {
return {
recordsTotal: data.count,
recordsFiltered: ...,
data: data.results,
...
}
},
...
},
...
}
但这只是引发了一个错误。好像不行。。。那怎么办呢?
您是对的 - 使用 ajax.dataSrc
选项是不可能的。它告诉 DataTables 从哪里获取行数据(在您的示例中为 data.results
),但是无法使用 ajax.dataSrc
告诉它从哪里获取 recordsTotal
等
为此,您需要将 ajax
选项用作函数 - 使您的 Ajax 调用和 return 成为一个对象。基本上与您已经在做的类似,但您也调用 $.ajax
。