我正在尝试对我的jquery数据表实施serverSide处理,这就是我从API发送回来的内容:
{
"data": {
"Data": [
{
"automated": false,
"date_added": "2020-01-10T08:55:56",
"dtime": null,
"end_time": null,
"id": 3768,
},
{
"automated": false,
"date_added": "2020-01-10T08:55:56",
"dtime": null,
"end_time": null,
"id": 3769,
},
{
"automated": false,
"date_added": "2020-01-10T08:55:56",
"dtime": null,
"end_time": null,
"id": 3770,
}
],
"recordsFiltered": 166,
"recordsTotal": 166
}
}
可以看到,这里涉及嵌套。现在,我尝试使用以下方式呈现数据表:
results_table = $('#results_table').DataTable({
processing: true,
serverSide: true,
ajax: {
url: `/api/v1/projects/results`,
dataSrc: function(json){
data = json.data.Data
recordsTotal = json.data.recordsTotal
recordsFiltered = json.data.recordsFiltered
return data;
}
},
columns: columns,
initComplete: tableInitComplete
});
});
上面的代码只是我试图以某种方式使'recordsTotal'和'recordsFiltered'开始工作的原因。我知道我在搞砸。结果,在我的网页上,虽然我可以看到数据表中的行已正确呈现,但是分页却遇到了一个问题:我的页面不显示提取了多少记录,并说“显示0到0,共0”条目(从NaN个总条目中筛选出)”等等,我的数据表未呈现固定数量的页码。相反,我得到类似
[1]->[2]->[3]...[]
如果我直接单击最后一个未编号的页面,则会收到错误消息。如果我逐页显示,则中间有无数页。
我该如何解决?是否修改从AP发送的数据的嵌套结构?这是我创建从API发送的数据的方法:
results = [row._asdict() for row in results]
result = {
"Data": results,
"recordsTotal" : 166,
"recordsFiltered" : 166
}
我不知道如何以正确的格式打包数据,而不是
{
"recordsTotal" : 166,
"recordsFiltered" : 166
"data" : [
{...}.
{...}
]
}
我最终有
{
"data": {
"data" : [
{...}.
{...}
],
"recordsTotal" : 166,
"recordsFiltered" : 166
}
}
如果我不想修改从API返回的数据,我该如何访问'recordsTotal'和'recordsFiltered'并使用它们消除我面临的问题?谢谢。
答案 0 :(得分:0)
您的JSON需要以这种格式返回。
示例JSON
{
"draw": 1,
"recordsTotal": 57,
"recordsFiltered": 57,
"data": [
{
"automated": false,
"date_added": "2020-01-10T08:55:56",
"dtime": null,
"end_time": null,
"id": 3768,
}
]
}
此外,您无需编写dataSrc
,因为Datatable会自动处理这些变量。
关于无限页面数。这是因为您的参数没有正确设置或返回。
您可以阅读更多详细信息here并查看live demo。您可以检查请求,以查看请求中传递了什么以及响应中返回了什么。
相应地映射字段,它应该可以正常工作。