关于dataTable基本使用有很多帖子说的很详细,在此不做详述。

最近使用dataTable处理服务器返回分页数据时遇到问题,问题解决后有一些心得分享一下:

1. 如果打开界面通过dataTable给表格填充数据,必须把dataTable调用放在document.ready方法里面,或者放在$(function(){  。。。 });里面二者等价。

2. 最简单的使用,服务器按照dataTable要求的分页结构返回分页信息,dataTable直接解析并使用

 1 var list = $('#personList').dataTable({
2 'searching' : false,
3 'ordering' : false,
4 "bLengthChange": false,
5 "iDisplayLength": 10,
6 "processing": true,
7 "serverSide": true,
8 "sServerMethod": "get",
9 'sAjaxSource' : '/test/listPerson',
10 'aoColumns' : [ {
11 'mDataProp' : 'name'
12 }, {
13 'mDataProp' : 'status'
14 },{
15 'mDataProp' : 'position'
16 }, {
17 'mDataProp' : 'grade'
18 }
19 ]
20 });

这种情况服务器端返回的数据结构必须是:

 1 public class Page{
2 private int sEcho;
3 private int iTotalRecords;
4 private int iTotalDisplayRecords;
5 private int iDisplayStart;
6 private int iDisplayLength;
7 private String sSearch;
8 private List<Object> aaData = new ArrayList<>();
9
10 }

前台收到page对象后会解析成dataTable的page对象,取出aaData作为表数据。

3. 我们现在服务端基本都是有结构化的返回结构体,如:

{"retCode":"00000", "retInfo":"Success", "data":{"sEcho":1, "iTotalRecords":12,"iTotalDisplayRecords":10,"iDisplayStart":0,"iDisplayLength":10,"sSearch":null, "aaData":[{"name":"lily","satus":"normal","position":"pm"}]}}

这种数据结构不能直接传给dataTable处理,无法识别。我们需要通过fnServerData对数据进行处理。

list = $('#personList').dataTable({
'searching' : false,
'ordering' : false,
"bLengthChange": false,
"iDisplayLength": 10,
"processing": true,
"serverSide": true,
"sServerMethod": "get",
'sAjaxSource' : '/test/person/list',
'fnServerData' : function (sSource, aoData, fnCallback) {
$.ajax({
"type": "GET",
"url": sSource,
"dataType": "json",
"data": aoData,
"success": function (result) {
if (result.retCode == "00000") {
fnCallback(result.data);
} else {
alert("Fail to get data!")
}
}
});
},
'aoColumns' : [ {
'mDataProp' : 'name'
}, {
'mDataProp' : 'status'
},{
'mDataProp' : 'position'
}
] //$_GET['sColumns']将接收到aoColumns传递数据
});

fnServerData主要是在将请求发送到server之前对数据进行处理,在收到server返回后对数据进行处理,方便dataTable填充数据。

'fnServerData' : function (sSource, aoData, fnCallback) 三个参数,sSource会传入dataTable的sAjaxSource,aoData会传入dataTable组织好的要发给server的数据,包括分页信息,如果不把这些数据继承下来发给服务,分页的请求信息会丢失,会导致server收到的分页信息中的iDisplayLength值为0,将aoData传入ajax的data属性以继承传递,fnCallback是dataTable后续处理数据的回调函数,在ajax的success指定的方法中将数据处理(对于我们上面的返回数据结构,从返回结果中取出data作为dataTable的接收数据)后的结果传递给fnCallback方法。

4. 如果在表格绘制完成后需要使用返回的表格数据做其他操作

使用dataTable的fnDrawCallback参数设置处理函数

 1 var list = $('#personList').dataTable({
2 'searching' : false,
3 'ordering' : false,
4 "bLengthChange": false,
5 "iDisplayLength": 10,
6 "processing": true,
7 "serverSide": true,
8 "sServerMethod": "get",
9 'sAjaxSource' : '/test/listPerson',
10 'aoColumns' : [ {
11 'mDataProp' : 'name'
12 }, {
13 'mDataProp' : 'status'
14 },{
15 'mDataProp' : 'position'
16 }, {
17 'mDataProp' : 'grade'
18 }
19 ],
20 'fnDrawCallback': function (result) {
21 var json=jQuery.parseJSON(result.jqXHR.responseText);
22 /** 使用返回对象 json 的代码**/23 }
24 });

fnDrawCallback的调用不会影响表格数据显示,因为此时表格已经绘制完成。

JQuery的dataTable实现分页的更多相关文章

  1. Spring Data Jpa+SpringMVC+Jquery.pagination.js实现分页

    本博客介绍基于Spring Data这款orm框架加上Jquery.pagination插件实现的分页功能. 介绍一下Spring Data框架 spring Data : Spring 的一个子项目 ...

  2. 第二百零九节,jQuery EasyUI,Pagination(分页)组件

    jQuery EasyUI,Pagination(分页)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Pagination(分页)组件的使 ...

  3. jquery自定义插件实现分页效果

    这节介绍如何自定义jquery插件,实现分页效果,话不多说,先看看实现的效果: 分页插件 实现的代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTM ...

  4. 将DataTable进行分页并生成新的DataTable

    /// <summary> /// 将DataTable进行分页并生成新的DataTable /// </summary> /// <param name="d ...

  5. jQuery的datatable的destroy属性,和$("#test").dataTable().fnDestroy();区别,两者的区别

    jQuery的datatable的destroy属性,和$("#test").dataTable().fnDestroy();区别,两者的区别. 1 destroy属性是,销毁实例 ...

  6. thinkphp5配合datatable插件分页后端处理程序

    thinkphp5配合datatable插件分页后端处理程序第一版DataTable.php v.1.0 <?php use think\Db; /** * DataTable.php. */ ...

  7. 使用jQuery开发datatable分页表格插件

    当系统数据量很大时,前端的分页.异步获取方式就成了较好的解决方案.一直以来,我都希望使用自己开发的 jquery 插件做系统. 现在,学习了 jquery 插件开发之后,渐渐地也自己去尝试着开发一些简 ...

  8. jquery datatable客户端分页保持

    请加入下面注释的参数,并强制刷新浏览器,即可解决,关键配置: "bStateSave":true, $("#tableID").DataTable({ &quo ...

  9. jquery plug-in DataTable API中文文档参考

    前言:最近在做一个WEB后台,无意中发现这个插件,试用了一下觉得不错,但网上关于它的资料大多不全,所以利用一些时间将其API文档翻了一下,发在园子里供大家参考.(p.s:个人E文水平很差,对着灵格斯翻 ...

  10. 使用ASP.NET+Jquery DataTables的服务器分页

    (1)先建立表,看看表结构 (2)建立存储过程 DataTables是服务器分页,GetWxUsers存储过程使用了4个参数 (1) @start--表示当前第几页,例如第3页,start是从0开始 ...

随机推荐

  1. zerologon复现

    zerologon漏洞复现 目录 zerologon漏洞复现 漏洞介绍 实验环境 实验开始 一.在github上下载脚本 二.检测是否可以利用 三.利用漏洞 1.清空域控账号密码 2.导出admin凭 ...

  2. https://lamp.sh/

    转载:LAMP一键安装包 LAMP一键安装包

  3. git拉取新分支、删除分支、修改远程分支

    1.拉取新分支 git checkout master           切换到master分支 git pull                                   更新到最新代码 ...

  4. 使用Shapefile C Library读取shp文件并使用OpenGL绘制

    1. 概述 坐标数据是空间数据文件的核心,空间数据的数据量往往是很大的.数据可视化是GIS的一个核心应用,绘制海量的坐标数据始终是一个考验设备性能的难题,使用GPU进行绘制可有效减少CPU的负载,提升 ...

  5. LeetCode-1220 统计元音字母序列的数目

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/count-vowels-permutation 题目描述 给你一个整数 n,请你帮忙统计一下我们 ...

  6. 百度脑图kityminder

    KityMinder Editor 是一款强大.简洁.体验优秀的脑图编辑工具,适合用于编辑树/图/网等结构的数据. 编辑器由百度 FEX 基于 kityminder-core 搭建,并且在百度脑图中使 ...

  7. 获取小程序toast控件

    Toast 含义 为了给当前视图显示一个浮动的显示块,与dialog不同它永远不会获得焦点 显示时间有限,根据用户设置的显示时间后自动消失 本身是个系统级别的控件,它归属系统settings,当一个a ...

  8. Mysql数据库基础第七章:流程控制结构

    Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...

  9. [Unity]利用Mesh绘制简单的可被遮挡,可以探测的攻击指示器

    最近做一个小游戏的Demo,最终的效果是这样的 主要是利用Mesh绘制三角形作为显示,然后使用后处理来制作探灯,注意,性能一般,仅仅适合小游戏 分为3步 1:利用mesh绘制三角形,原理很简单,利用三 ...

  10. 拼多多anti-content核心算法完全解密+修复

    今天偶然看到拼多多的ant-content好奇就搞了下. 解密方法和代码 代码是用ast来解密的.利用babel处理,解密一部分+手动修复代码. AST相关的教程和文档 https://steaken ...