jQuery DataTables插件自定义Ajax分页实例解析


Posted in Javascript onApril 28, 2020

一、问题描述

园友是做前端的,产品经理要求他使用jQuery DataTables插件显示一个列表,要实现分类效果。

后端的分页接口已经写好了,不涉及条件查询,需要传入页码(pageNo)和页面显示数据条数(pageSize),显示相应页的显示记录,且不能修改后端接口。

二、分析

先来分析下分页实现。

一是后端分页:这种情况下,在后端很容易实现,在官网上有示例,不多说明。
二是前端分页:前端分页也是支持的,不过需要一次把所有数据都获取到才可以。

看到这里,问题来了。由于后端在目前的情况下是更改不了,只能在前端实现。但是,现在又不满足前端分页的条件

一次性获取所有数据(现在后端数据接口只能返回相应页码的数据)。

介于目前的情况,获取的数据只有一页,没有所有的页码。
试试能不能伪装一下后端分页的情况,就是开启后端分页,在请求之前,将传入的数据进行重组,在获取到数据后,将返回的数据按照后端分页的数据格式组装一遍。

经过测试,是可以的。

三、实现

通过DataTables配置参数ajax项实现的。关于ajax详细介绍请看官方说明:中文 | 英文

ajax接收三种类型的参数:
*string: 设置获取数据的url
*object:和 jQuery.ajax 定义类似
*function:自定义获取数据的功能
直接上代码吧,都有注释。
前端页面代码:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <title>jquery DataTables插件自定义分页ajax实现</title>
 <link href="http://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" media="screen">
 <link href="http://cdn.bootcss.com/datatables/1.10.11/css/dataTables.bootstrap.min.css" rel="stylesheet" media="screen">
 <link href="http://cdn.bootcss.com/datatables/1.10.11/css/jquery.dataTables.min.css" rel="stylesheet" media="screen">
</head>
<body>
<div class="row-fluid">
 <h3>JQuery DataTables插件自定义分页Ajax实现</h3>
 <table id="example" class="display table-striped table-bordered table-hover table-condensed" cellspacing="0" width="100%">
 <thead>
 <tr>
 <th>编号</th>
 <th>姓名</th>
 <th>性别</th>
 </tr>
 </thead>
 </table>
</div>
<script src="http://cdn.bootcss.com/datatables/1.10.11/js/jquery.js"></script>
<script src="http://cdn.bootcss.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script src="http://cdn.bootcss.com/datatables/1.10.11/js/jquery.dataTables.min.js"></script>
<script src="http://cdn.bootcss.com/datatables/1.10.11/js/dataTables.bootstrap.min.js"></script>
<script type="text/javascript">
 $(function () {
 //提示信息
 var lang = {
 "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": ": 以降序排列此列"
 }
 };

 //初始化表格
 var table = $("#example").dataTable({
 language:lang, //提示信息
 autoWidth: false, //禁用自动调整列宽
 stripeClasses: ["odd", "even"], //为奇偶行加上样式,兼容不支持CSS伪类的场合
 processing: true, //隐藏加载提示,自行处理
 serverSide: true, //启用服务器端分页
 searching: false, //禁用原生搜索
 orderMulti: false, //启用多列排序
 order: [], //取消默认排序查询,否则复选框一列会出现小箭头
 renderer: "bootstrap", //渲染样式:Bootstrap和jquery-ui
 pagingType: "simple_numbers", //分页样式:simple,simple_numbers,full,full_numbers
 columnDefs: [{
 "targets": 'nosort', //列的样式名
 "orderable": false //包含上样式名‘nosort'的禁止排序
 }],
 ajax: function (data, callback, settings) {
 //封装请求参数
 var param = {};
 param.limit = data.length;//页面显示记录条数,在页面显示每页显示多少项的时候
 param.start = data.start;//开始的记录序号
 param.page = (data.start / data.length)+1;//当前页码
 //console.log(param);
 //ajax请求数据
 $.ajax({
 type: "GET",
 url: "/hello/list",
 cache: false, //禁用缓存
 data: param, //传入组装的参数
 dataType: "json",
 success: function (result) {
 //console.log(result);
 //setTimeout仅为测试延迟效果
 setTimeout(function () {
 //封装返回数据
 var returnData = {};
 returnData.draw = data.draw;//这里直接自行返回了draw计数器,应该由后台返回
 returnData.recordsTotal = result.total;//返回数据全部记录
 returnData.recordsFiltered = result.total;//后台不实现过滤功能,每次查询均视作全部结果
 returnData.data = result.data;//返回的数据列表
 //console.log(returnData);
 //调用DataTables提供的callback方法,代表数据已封装完成并传回DataTables进行渲染
 //此时的数据需确保正确无误,异常判断应在执行此回调前自行处理完毕
 callback(returnData);
 }, 200);
 }
 });
 },
 //列表表头字段
 columns: [
 { "data": "Id" },
 { "data": "Name" },
 { "data": "Sex" }
 ]
 }).api();
 //此处需调用api()方法,否则返回的是JQuery对象而不是DataTables的API对象
 });
</script>
</body>
</html>

JSON数据格式:

jQuery DataTables插件自定义Ajax分页实例解析

效果图:

jQuery DataTables插件自定义Ajax分页实例解析

精彩专题分享:jquery分页功能操作 JavaScript分页功能操作

本文就介绍到这里,希望对大家的学习有所帮助。

Javascript 相关文章推荐
验证用户是否修改过页面的数据的实现方法
Sep 26 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
Jan 08 Javascript
浅谈javascript回调函数
Dec 07 Javascript
js实现ifram取父窗口URL地址的方法
Feb 09 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
Jan 22 Javascript
微信小程序 MINA文件结构
Oct 17 Javascript
基于JS实现的随机数字抽签实例
Dec 08 Javascript
详解jQuery选择器
Dec 21 Javascript
Vue 页面状态保持页面间数据传输的一种方法(推荐)
Nov 01 Javascript
JavaScript日期库date-fn.js使用方法解析
Sep 09 Javascript
vuex刷新后数据丢失的解决方法
Oct 18 Javascript
vue element-ui中table合计指定列求和实例
Nov 02 Javascript
Markdown+Bootstrap图片自适应属性详解
May 21 #Javascript
使用jQuery实现WordPress中的Ctrl+Enter和@评论回复
May 21 #Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
May 21 #Javascript
IScroll5 中文API参数说明和调用方法
May 21 #Javascript
JavaScript的ExtJS框架中表格的编写教程
May 21 #Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
May 21 #Javascript
jQuery插件pagination实现无刷新分页
May 21 #Javascript
You might like
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
php二维数组排序详解
2013/11/06 PHP
PHP汉字转换拼音的函数代码
2015/12/30 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
用Javascript数组处理多个字符串的连接问题
2009/08/20 Javascript
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
获取select元素被选中的文本内容的js代码
2014/01/29 Javascript
JavaScript中的对象的extensible属性介绍
2014/12/30 Javascript
js与jquery回车提交的方法
2015/02/03 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
2015/09/15 Javascript
Angular实现form自动布局
2016/01/28 Javascript
js判断某个字符出现的次数的简单实例
2016/06/03 Javascript
基于javascript实现的快速排序
2016/12/02 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
值得分享和收藏的xmlplus组件学习教程
2017/05/05 Javascript
vue2中使用less简易教程
2018/03/27 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
2018/08/09 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
Vue的双向数据绑定实现原理解析
2020/02/17 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
python 实现上传图片并预览的3种方法(推荐)
2017/07/14 Python
分享一个可以生成各种进制格式IP的小工具实例代码
2017/07/28 Python
详谈在flask中使用jsonify和json.dumps的区别
2018/03/26 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
2018/11/21 Python
详解Python二维数组与三维数组切片的方法
2019/07/18 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
苹果Mac升级:MacSales.com
2017/11/20 全球购物
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
会计毕业生自荐信
2013/11/21 职场文书
家长会主持词
2014/03/26 职场文书
团日活动总结书格式
2014/05/08 职场文书
车辆工程专业求职信
2014/06/14 职场文书
房产协议书范本2014
2014/09/30 职场文书
Redis Cluster 集群搭建你会吗
2021/08/04 Redis