DataTable的Ajax使用
DataTable
Datatables是一款jquery表格插件。它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能。
中文网: http://www.datatables.club/
用法:
先从最简单的开始:导入导入dataTable需要的js与css
- css http://cdn.datatables.net/1.10.15/css/jquery.dataTables.min.css
- js http://cdn.datatables.net/1.10.15/js/jquery.dataTables.min.js
HTML
<table id="example" class="display" cellspacing="0" width="100%">
<thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Extn.</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Extn.</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</tfoot>
</table>
Js : 初始化表格
$(document).ready(function() {
$('#example').DataTable( {
"ajax": "data/objects.txt",
"columns": [
{ "data": "name" },
{ "data": "position" },
{ "data": "office" },
{ "data": "extn" },
{ "data": "start_date" },
{ "data": "salary" }
]
} );
} );
这是使用Ajax的例子,知道的朋友都知道现在都是使用前后端分离+Ajax返回Json数据来进行数据的传递的。dataTable支持 Ajax + Josn 的形式返回数据并解析渲染。
json : 数据格式
{ "name": "Tiger Nixon", "position": "System Architect", "salary": "$3,120", "start_date": "2011/04/25", "office": "Edinburgh", "extn": "5421" }
json就不多说了,另外推荐一个格式化json的网站,蛮好用的 https://www.bejson.com/
完整案例:
<table id="table" class="table table-bordered table-hover">
<thead>
<th width="10%">成交编号</th>
<th width="5%">签约人</th>
<th width="5%">买方</th>
<th width="5%">卖方</th>
<th width="10%">房源信息</th>
<th width="10%">总价(元)</th>
<th width="5%">成交时间</th>
<th width="6%">状态</th>
<th width="15%">操作</th>
</thead>
<tbody> <!--tbody中的内容dataTable会自动填充-->
</tbody>
</table>
- 这里table的Id是初始化要用到的
js代码:
var table = $("#table"); //定义表格接下来好初始化
table.dataTable({ //表格渲染开头时可以设置一些配置参数(如果你刚开始接触也可以啥都不配)
"bSort" : false, //
processing : true, //是否显示处理状态(排序的时候,数据很多耗费时间长的话,也会显示这个)
serverSide : true, //是否开启服务器模式
searching : false, //是否允许Datatables开启本地搜索
autoWidth : true, //自适应宽度
language : {
url : '/js/plugins/dataTables/language/Chinese.json' //DataTables语言配置选项
},
ajax : {
url : "/deal/getxxxList", //访问路径,返回Json数据
data : function(d) { //传递参数
rowCode1 = 0;
planify(d);
d.timeStart = $("#timeStart").val();
d.timeEnd = $("#timeEnd").val();
d.departmentId = $(
"#selectDepartment option:selected").val();
d.price = $("#selectPrice option:selected").val();
d.keywords = $("#keywords").val();
d.dealStatus = $(
"#selectDealStatus option:selected").val();
d.paidStatus = $(
"#selectPaidStatus option:selected").val();
d.alreadySplit = $(
"#selectAlreadySplit option:selected")
.val();
},
type : "POST" //设置请求类型
},
columnDefs : [ { //设置列定义初始化属性
"defaultContent" : "", //为列设置默认的静态内容
"targets" : "_all" //指定所有列
} ],
columns : [ //数据渲染,固定格式,下面每一个对应表格一个td
{
"name" : "dealCode", //后台返回json数据 这是名
"data" : "dealCode" //这是值,一定要对应
},
{
"name" : "dealUserName",
"data" : "dealUserName"
},
{
"name" : "custName",
"data" : "custName"
},
{
"name" : "ownerName",
"data" : "ownerName"
},
{
"name" : "houseSource",
"data" : function(row) { //这是第二种写法,运用场景是你要做判断写js的时候可以这样写
//这个"row"就是数据源,可以通过 row.xx来获取json返回的数据,名字要对上
var projectStr = "";
if (typeof (row.projectName) == "undefined" && row.houseSourceProject == undefined) {
return "";
}
var buildArea = "";
if (parseInt(row.buildArea) > 0) {
buildArea = row.buildArea;
}
//优先取楼盘名称
if(row.houseSourceProject != undefined && row.houseSourceProject != ""){
projectStr = row.houseSourceProject;
}else if(row.projectName != undefined && row.projectName != ""){
projectStr = row.projectName;
}else{
projectStr = "";
}
return projectStr + " " + buildArea + "㎡"; // 返回的值就是表格td的值
}
},
{
"name" : "dealPrice",
"data" : "dealPrice"
},
{
"name" : "dealTimeStr",
"data" : "dealTimeStr"
},
{
"name" : "dealStatus",
"data" : function(row) {
var status = row.dealStatus;
var split = row.alreadySplit;
var paid = row.paidStatus;
var s1 = "";
var s2 = "";
var s3 = "";
if (status == 0) {
s1 = "未审核<br>";
} else if (status == 1) {
s1 = "已审核<br>";
} else if (status == 2) {
s1 = "已作废<br>";
} else {
s1 = "<br>";
}
if (split == 0) {
s2 = "未分配<br>";
} else if (split == 1) {
s2 = "已分配<br>";
} else {
s2 = "<br>"
}
if (paid == 1) {
s3 = "已回款";
} else if (paid == 0) {
s3 = "未回款";
} else if (paid == 2) {
s3 = "部分回款";
}
return s1 + s2 + s3;
}
},
{
"name" : "doElse",
"data" : function(row) {
var html = "<table><tr>";
if (row.dealStatus == 0) {
html += "<td><a class='get_detail btn-xs btn btn-outline btn-light' data-toggle='modal' data-target='#dealDetail' onclick='openOldDetail("+row.dealId+",1,\"" + row.dealCode +"\")' dealId='"+row.dealId+"'><span>查看</span></a></td>";
} else if (row.dealStatus == 1) {
html += "<td><a class='get_detail btn-xs btn btn-outline btn-light' data-toggle='modal' data-target='#dealDetail' onclick='openOldDetail("+row.dealId+",2,\"" + row.dealCode +"\")'><span>查看</span></a></td>";
if (row.paidStatus != 1) {
html += "<td><a data-toggle='modal' onclick='toGetPaid("
+ row.dealId
+ ")' data-target='#myModal3' class='btn-xs btn btn-outline btn-light'>收款</a></td>";
}
html += "<td><a class='get_detail btn-xs btn btn-outline btn-light' onclick='preview("+row.dealId+",\"" + row.dealCode +"\")'>业绩确认单</a></td>";
} else {
html += "<td><a class='get_detail btn-xs btn btn-outline btn-light' data-toggle='modal' data-target='#dealDetail' onclick='openOldDetail("+row.dealId+",2,\"" + row.dealCode +"\")' dealId='"+row.dealId+"'><span>查看</span></a></td>";
}
html += "<td><a onclick='deleteDealDetail("
+ row.dealId
+ ")' class='btn-xs btn btn-outline btn-light'>删除</a></td>";
html += "</tr></table>";
return html;
}
} ]
});
注意的几个点:我刚开始做的时候也是一脸懵b的。
- 不止我这一种写法,有很多种写法,我这种的应用场景适用于 Ajax + json 数据来做。(我也只会这一种,我一个写后台的我容易吗)
- 参数配置丰富到你想吐,文档都在官网中有,我还是写出来吧:http://www.datatables.club/reference/option/
- 数据一定要对上,少一个都不行,你表格中写了多少个th,你在columns中就要写多少个。
其实非常的简单,只要你的数据个数能够对的上并且后台数据是标准json格式,你没有打错的话,都是没毛病的。
顺便讲讲dataTable的分页:
@RequestMapping(value = "getXXXList", produces = "text/html;charset=UTF-8")
@ResponseBody
public String getOldHouseList(HttpServletRequest request, DataTableFormVo vo) {
//注意这个 DataTableFormVo 参数这个参数是用来接收dataTable传递过来的一个vo对象,其中就包括分页必须的两个参数,第几条到第几条,再利用mysql的limit进行分页就很简单了
//业务代码就不写了
return resultVo.toString();
}
到这里就发现,dataTable不是自带分页吗,怎么还要用limit了

这么说你就明白了,dataTable自带的分页不是物理分页,如果我有一千万条数据不就嗝屁了,所以我们还是乖乖的用物理分页吧。
刚刚开始写博客,可能写的很粗糙,感谢你能看到这里。

DataTable的Ajax使用的更多相关文章
- datatable 的ajax修改参数,post可以传参处理
datatables常用参数记录 { "searchable": false, "orderabl ...
- datatable 多字段 排序;
没有找到datatable的排序方面运用案例,根据接口,自己实现 所以记录一二,小伙伴们有更好的方法,欢迎讨论 1.需求图 2.需求 1)默认 未开启 灰色下箭头 2)第一次点击 :启动排序,降序- ...
- Jquery DataTable基本使用
1,首先需要引用下面两个文件 <link rel="stylesheet" href="https://cdn.datatables.net/1.10.16/css ...
- jquery datatable的详细用法
1,首先需要引用下面两个文件 <link rel="stylesheet" href="https://cdn.datatables.net/1.10.16/css ...
- datatable详解(angular-datatable)+后台分页(springmvc)
datable常规配置,百度一大堆 function prepareDatatable(selector, options) { var defaultOptions = { autoWidth: t ...
- datatable的使用
学习可参考:http://www.guoxk.com/node/jquery-datatables http://yuemeiqing2008-163-com.iteye.com/blog/20069 ...
- datatables中的Options总结(1)
datatables中的Options总结(1) 最近一直研究dataTables插件,下面是总结的所有的选项内容,用了帮助学习datatables插件. 这些选项的配置在$().Datatable( ...
- datatables增删改查的实现
学习可参考:http://www.guoxk.com/node/jquery-datatables http://yuemeiqing2008-163-com.iteye.com/blog/20069 ...
- 转 Datatables中文API——基本参数
鉴于自己一直在使用datatables,发现这是个很不错的表格插件,但是好的东西都是英文的,所以我结合自己的使用经验,把官网的英文api做下简单的翻译,同时也希望大家把自己的使用经验一起分享出来,让我 ...
随机推荐
- C#内存释放(垃圾回收)
今天写了个很小的程序,程序的功能仅仅是截图,但是如果长时间开启并截图的时候,程序会变的很大,从刚开始的运行在任务管理器中只有十几K大小,运行一段时间后在任务管理器中看到程序可以达到1G或2G甚至更大: ...
- ADO.NET操作PostgreSQL:数据库操作类(已封装)
1.增.删.改通用方法 /// <summary> /// 增.删.改通用方法 /// </summary> /// <param name="commandT ...
- ABP框架中微服务跨域调用其它服务接口
AjaxResponse为ABP自动包装的JSON格式 /// <summary> /// 通过地址和参数取得返回OutPut数据 /// </summary> /// < ...
- 开源一款强大的文件服务组件(QJ_FileCenter)(系列一)
系列文章 1. 开源一款强大的文件服务组件(QJ_FileCenter)(系列一) 2. 开源一款强大的文件服务组件(QJ_FileCenter)(系列二 安装说明) 3. 开源一款强大的文件服务组件 ...
- 【CronExpression表达式详解和案例】(转载)
原文地址:https://www.cnblogs.com/pipi-changing/p/5697481.html 找了下Cron的资料,这篇作者写的比较清晰,转载记录一下,方便后面使用的时候在g ...
- 【大数据之数据仓库】kudu性能测试报告分析
本文由 网易云发布. 这篇博文主要的内容不是分析说明kudu的性能指标情况,而是分析为什么kudu的scan性能会这么龊!当初对外宣传可是加了各种 逆天黑科技的呀:列独立存储.bloom filte ...
- C#通过rdp账密直接打开远程桌面
思路是首先新建一个vbs脚本,再创建一个bat脚本,再创建rdp文件,运行顺序是vbs->bat->rdp.rdp文件里面包含远程电脑的账密和其它信息,这样就可以不用再输入账密,而在程序里 ...
- NPOI 导出excel 通用方法
public static byte[] ExportExcel<T>(Dictionary<string, string> columnsHeader, List<T& ...
- 《Python黑帽子:黑客与渗透测试编程之道》 Scapy:网络的掌控者
窃取email认证: 测试代码: #!/usr/bin/python #coding=utf-8 from scapy.all import * #数据包回调函数 def packet_callbac ...
- Manacher算法学习笔记
前言 Manacher(也叫马拉车)是一种用于在线性时间内找出字符串中最长回文子串的算法 算法 一般的查找回文串的算法是枚举中心,然后往两侧拓展,看最多拓展出多远.最坏情况下$O(n^2)$ 然而Ma ...