dataTables是自带有分页功能的,在设置”paging”: true之后,就可以开启前端分页。
    但是有一个弊端,就是只能对表格的数据进行分页,而在数据量过多时,要通过一次请求拿到所有数据显然是不现实的,这时候就需要后台进行分页,而前端通过请求页码得到单页数据,这时候要如何实现分页呢?在踩了几天的坑之后,终于实现了分页,下面来简单的总结一下。
- 首先来看一下后台接口的数据格式
 
1  | //request  | 
在请求时需要发送页码和每页的数据条数,接口返回的list就是需要的数据,totalCount则是数据的总数。
- 声明一下需要发送的数据
 
1  | var sendData = {  | 
- 接下来配置一下dataTbles,使用ajax方式拿到数据
 
具体的配置不多介绍,需要注意的是,首先要开启服务器模式。1
2"serverSide"  : true,
"processing"  : true,
之后配置一下datatable的ajax配置项,这里是直接使用jQuery的ajax方法发送的请求1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21"ajax" : function (data, callback) {	//data是表格数据,callback写入返回的数据
	$.ajax({
        url        : url,
        dataType   : "json",
        contentType: "application/json",
        headers    : {
            token: token
        },
        data       : JSON.stringify(sendData),
        type       : "post",
        success    : function (res) {
            if(res.status == 200){	
                callback({
                    recordsTotal   : res.data.totalCount,	//返回数据的总数
                    recordsFiltered: res.data.totalCount,	//返回数据数量不进行过滤,每次查询均视为全部结果
                    data           : res.data.list
                });
            }
        }
    });
}
这里实现之后应该就可以实现分页了,但是还有一个问题,就是在切换页跟每页条数的时候,数据都不会发生变化,这是因为每次发送的sendData都没有变化。
- 最后一步,换页的实现
1
2
3
4
5
6
7
8
9
10//page切换事件
$('#table').on('page.dt', function () {
sendData.pageNo = table.page() + 1; //获取当前page
sendData.pageSize = table.page.len(); //获取当前page size
});
//page size切换事件
$('#table').on('length.dt', function () {
sendData.pageNo = 1;
sendData.pageSize = table.page.len();
}); 
这样就完成了后台分页的前端实现。
最后记录下dataTables刷新数据用到的方法
1  | //更改table ajax请求的参数  |