我目前正在使用DataTables的服务器端选项,我目前的问题是数据表中的页码只显示1。为了进一步解释这里是我的代码:
Javascript:
var oTable1 = $('#users-table').dataTable({
"bDestroy": true,
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": "/v1/users",
"bPaginate": true,
"aoColumns": [
{ "mData": "id" },
{ "mData": "username" },
{ "mData": "name" },
{ "mData": "acctype" },
{ "mData": "country" },
{ "mData": "createdAt" },
{ "mData": "button" }
]
});
/v1/用户:
viewAll: function(req, res, next) {
var colS = "";
switch(req.query.iSortCol_0){
case '0': colS = 'id'; break;
case '1': colS = 'username'; break;
case '2': colS = 'firstname'; break;
case '3': colS = 'acctype'; break;
case '4': colS = 'country'; break;
case '5': colS = 'createdAt'; break;
default: break;
};
var options = {
sort: colS+' '+req.query.sSortDir_0,
or: [
{ acctype: { 'contains': req.query.sSearch }},
{ id: { 'contains': req.query.sSearch }},
{ username: { 'contains': req.query.sSearch }},
{ lastname: { 'contains': req.query.sSearch }},
{ firstname: { 'contains': req.query.sSearch }},
{ country: { 'contains': req.query.sSearch }},
{ createdAt: { 'contains': req.query.sSearch }}
],
limit: req.query.iDisplayLength
};
console.log(req.query);
console.log(req.query.sSearch);
//console.log(options);
var p = req.query.iDisplayStart+1;
//console.log(req.query.iDisplayStart);
Users.find(options).paginate({ page: p, limit: req.query.iDisplayLength }).exec(function(err, usr){
if(err){
res.send(500, { error: 'DB error' });
} else {
var retuser = [];
usr.forEach(function(user){
retuser.push({ id: user.id, username: user.username, name: user.firstname+" "+user.lastname, acctype: user.acctype, country: user.country, createdAt: user.createdAt, button: "<a class='blue' href='#view-user' data-toggle='modal' id='user-info'> <i class='icon-zoom-in bigger-130'></i></a>" });
});
Users.count().exec(function(err, result){
var json = {
aaData: retuser,
iTotalRecords: result,
iTotalDisplayRecords: usr.length
};
res.contentType('application/json');
res.json(json);
});
}
});
},
基本上发生的是:
当我更改页面时
到2,它显示应该在第2页显示的内容,如果我将它更改为1,它显示应该在第1页显示的内容。当更改要显示的记录数时,它显示第11条记录。所以我想我如何从 Controller 检索数据没有问题。
我以为 DataTables 会根据
iTotalDisplayRecords
和 iTotalRecords
自动添加页码,但事实证明并非如此。我的代码是否有问题或我认为有问题,我必须成为在我的数据表中添加页码的人? 最佳答案
我相信问题在于您在 iTotalDisplayRecords
中返回了错误的值:
"iTotalRecords": 11,
"iTotalDisplayRecords": 10
从 manual :
当不执行过滤时,
iTotalRecords
应该等于 iTotalDisplayRecords
。要纠正该问题,您需要在应用过滤后计算 总记录数 并将该值用于
iTotalDisplayRecords
而不是 usr.length
。关于jquery - 使用 DataTables 在 Sails 中的服务器端分页,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30772911/