基础代码
- DataTable默认的分页机制为前端分页,此处不过多陈述,通过查找资料了解到,后端分页需要将原来的
bServerSide:false // 修改为true
- 后端分页对返回的JSON数据格式有要求,具体格式如下:
{"sEcho":"1","iTotalRecords":"0","iTotalDisplayRecords":"0","aaData":[]}
- 其中sEcho是前端传递的,只需获取然后原数返回即可,iTotalRecords字面理解意思是当前数据表中总的记录数,iTotalDisplayRecords是当前页面要展示的记录数,aaData为返回列表的数据。
html代码
<div class="col-lg-5">
<table class="table table-striped table-bordered table-hover dataTables-asset" id="dataTables-asset">
<thead>
<th class="text-center">{% trans "Task ID" %}</th>
<th class="text-center">{% trans "Hostname" %}</th>
<th class="text-center">{% trans "IP" %}</th>
<th class="text-center">{% trans "Status" %}</th>
<th class="text-center">{% trans "Start Date" %}</th>
<th class="text-center">{% trans "End Date" %}</th>
<th class="text-center">{% trans "Total Time" %}(s)</th>
</thead>
</table>
</div>
JS代码
function dataTableDraw(){
$("#dataTables-asset").dataTable({
bServerSide:true, //开启后端分页
bDestroy: true, //下边两个属性应该是重载数据相关的 不加在加载数据会弹窗报错 点击确定后显示数据
bRetrieve: true,
bProcessing: true, //显示加载数据时的提示
bInfo:true, //显示信息 如 当前x页 共x条数据等
bSort:true, //允许排序
bFilter:true, //检索、筛选框
sAjaxSource: "{% url 'jobs:batch_scripts_taskschedule' %}", //请求url
bLengthChange:true, //支持变更页面显示数据行数
sPaginationType: "bootstrap", //翻页风格
bPaginate:true, //显示翻页按钮
fnServerData: retrieveData, //执行函数
sScrollX:true, //滚动条
aoColumns:[//列表元素 支持多种属性
{ "data": "id" },
{ "data": "hostname","bSortable":false}, //不允许当前页排序
{ "data": "ip" },
{ "data": "status" },
{ "data": "start_time","fnRender":function(data,val){
var JSONTime = new Date(val.time);
return JSONTime.format('yyyy-MM-dd HH:mm:ss');}},
{ "data": "end_time"},
{ "data": "total_time" },
],
oLanguage: {
"sProcessing" : "正在加载中......",
"sLengthMenu" : "_MENU_",
"sZeroRecords" : "无记录",
"sEmptyTable" : "表中无数据存在!",
"sInfo" : "当前显示 _START_ 到 _END_ 条,共 _MAX_ 条记录",
"sInfoEmpty" : "没有数据",
"sInfoFiltered" : "数据表中共为 _TOTAL_ 条记录",
"sSearch" : " ",
"oPaginate" : {
"sFirst" : " 首页 ",
"sPrevious" : " 上一页 ",
"sNext" : " 下一页 ",
"sLast" : " 末页 "
}
}
}).off("click").on("click", function(event) {
var TaskScheduleID = ($(event.target).closest("tr").attr("id"));
get_data(TaskScheduleID);
//增加一个点击事件
});;
$(".dataTables_wrapper .dataTables_filter input").attr("placeholder","检索内容");
}
//对应上边的回调函数 参数个数不变 名字可改 第一个为请求url 第二个为上送数据 第三个为回调函数
function retrieveData(sSource,aoData,fnCallback) {
var startDate = {
"name":"startDate",
"value":$("#from").val()
}
var endDate = {
"name":"endDate",
"value":$("#to").val()
}
//我这里按照请求数据的格式增加了自己的查询条件 请求数据格式固定为 name-value的格式 可以使用
//alert打印查看 包含了基本的页码、页面数据元素、等信息以及新增的查询条件
aoData.push(startDate);
aoData.push(endDate);
$.ajax({
url : sSource,//这个就是请求地址对应sAjaxSource
data : {"aoData":JSON.stringify(aoData),"jobid": "{{ job_obj.id }}"},//这个是把datatable的一些基本数据传给后台,比如起始位置,每页显示的行数,自定义的一个任务ID
type : 'post',
dataType : 'json',
async : false,
success : function(result) {
fnCallback(result);//把返回的数据传给这个方法就可以了,datatable会自动绑定数据的
},
error : function(msg) {
alter(result["error"]);
}
});
}