在对datatables做后端数据填充的时候,遇到一个,翻页问题。在多次操作翻页后,总是提示加载中。反了很多博客没有找到原因。
经过测试,发现原来自己坑了自己。
代码如下:
datatables : {
init : function (table_id,ajax_url,columns,buttons,searchParams) {
if(null == columns || undefined == columns){
columns = [];
}
if(null == buttons || undefined == buttons){
buttons = [];
}
var $t_table = $("#" + table_id);
var $api_table = $t_table.dataTable({
language: {
"sProcessing": "处理中...",
"sLengthMenu": "每页 _MENU_ 项",
"sZeroRecords": "没有匹配结果",
"sInfo": "当前显示第 _START_ 至 _END_ 项,共 _TOTAL_ 项。",
"sInfoEmpty": "当前显示第 0 至 0 项,共 0 项",
"sInfoFiltered": "(由 _MAX_ 项结果过滤)",
"sInfoPostFix": "",
"sSearch": "搜索:",
"sUrl": "",
"sEmptyTable": "表中数据为空",
"sLoadingRecords": "载入中...",
"sInfoThousands": ",",
"oPaginate": {
"sFirst": "首页",
"sPrevious": "上页",
"sNext": "下页",
"sLast": "末页",
"sJump": "跳转"
},
"oAria": {
"sSortAscending": ": 以升序排列此列",
"sSortDescending": ": 以降序排列此列"
}
},
ajax : {
url:ajax_url,
data:function (d) {
if(undefined != searchParams && null != searchParams )
$.each(searchParams,function (i,val) {
d[i] = val;
});
}
},
processing: true,
serverSide: true,
dom: ">r>>",
columns : columns,
buttons: buttons
}).api();
return $api_table;
}
}
var columns = [
{data:'itemName'},
{data:'itemIcon',
render:function (data, type, row, meta) {
return '';
}
},
{data:'id'},
{data:'extNeedAmount'},
{
data:'id',
render:function (data, type, row, meta) {
return '操作';
}
}
];
var buttons = [
{
text: '添加',
className: 'btn green ',
action: function ( e, dt, node, config ) {
$("#addLevelModel").modal("show");
}
}
];
var table = Q.datatables.init('level_table','/admin/basic/level/loaddata',columns,buttons);
后端代码
/**
* 加载表格内容
* @return type
*/
public function loadDataAction()
{
$column_name = $this->request->get('columns')[$this->request->get('order')[0]['column']]['data'];
$column_order = $this->request->get('order')[0]['dir'];
$search_value = $this->request->get('search')['value'];
$params = array(
'order'=>$column_name.' '.$column_order,
'conditions'=>'itemType = '.$this->mItemType.' and ( itemName LIKE "%'.$search_value.'%" )'
);
$recordsTotal = SysItem::count(array( 'conditions'=>'itemType = '.$this->mItemType));
$recordsFiltered = SysItem::count($params);
$params['limit'] = array('number' => intval($this->request->get('length')), 'offset' => intval($this->request->get('start')));
$data = SysItem::find($params)->toArray();
$result = array(
'draw'=>intval($this->request->get('draw')),
'recordsTotal'=>$recordsTotal,
'recordsFiltered'=>$recordsFiltered,
'data'=>$data
);
return $this->response->setJsonContent($result);
}
特别注意的地方:
'draw'=>intval($this->request->get('draw'))draw要原样返回,不然会出现一直加载中,本来我用start做返回的,就 只能前翻,后翻页就出现问题。前端只要不需要做翻页函数处理,回调部分,我也默认了。datatables非常强大,各种排序过滤功能,这里我没有做代码展示。后面的学习中,再继续追加到这里。
来源:https://www.cnblogs.com/erick-x/p/5552386.html