您的位置:首页 > 其它

使用DataTable插件实现异步加载数据

2017-11-19 11:43 796 查看

table部分代码

<table class="table table-bordered table-striped" id="table-main">
<thead>
<tr>
<th>用户名</th>
<th>渠道名</th>
<th>游戏名</th>
<th>结果</th>
<th>耗时</th>
<th>创建时间</th>
</tr>
</thead>
</table>

异步加载数据并实现定制化

下面是简单例子, 其中 table-main 的初始化元素为table的id。

$('#select-game').select2(); // 初始化搜索下拉框

// 表格汉化列表
var table_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_main = $("#table-main").dataTable({
language:table_lang,  // 提示信息
autoWidth: false,   // 禁用自动调整列宽
lengthMenu: [25, 50, 100],
stripeClasses: ["odd", "even"], // 为奇偶行加上样式,兼容不支持CSS伪类的场合
processing: false,   // 隐藏加载提示,自行处理
serverSide: true,   // 启用服务器端分页
searching: true,    // 启用原生搜索
orderMulti: true,   // 启用多列排序
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; // 当前页码
//ajax请求数据
$.ajax({
type: "GET",
url: "getRecodeList",
cache: true, // 开启缓存
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);
cut_td($("#table-main"), 40); // 表格截断

}, 200);
}
});
},
//列表表头字段
columns: [
{ "data": "user_name" },
{ "data": "channel" },
{ "data": "game" },
{ "data": "status",
"render": function(data){
var status_name = '';
switch(data)
{
case 0: status_name = '未完成'; break;
case 1: status_name = '脚本错误'; break;
case 2: status_name = '成功'; break;
case 3: status_name = '测试通过'; break;
default : status_name = '未知'; break;
}
return status_name;
}},
{ "data": "cast_time",
"render" : function(data){
if (data)
{
return data + 's';
}
else
{
return '废弃';
}
}},
{ "data": "format_created_at" },
]
}).api();

后台数据返回格式

{
"total": 234,
"per_page": "25",
"current_page": 1,
"last_page": 10,
"next_page_url": "http://local.dgc_sdkops.com/monitor/log_pack/getRecodeList?page=2",
"prev_page_url": null,
"from": 1,
"to": 25,
"data": [
{
"id": 128,
"user_id": 1,
"task_id": "package_128_113",
"channel_version_id": 128,
"game_version_id": 113,
"extend_id": 0,
"type": "pack",
"status": 2,
"remark": "",
"cast_time": 93475,
"created_at": "1500365068",
"updated_at": "1500458543",
"user_name": "admin",
"format_created_at": "2017-07-18 16:04:28",
"format_updated_at": "2017-07-18 16:04:28",
"game": "x",
"channel": "y",
"game_id": 11290,
"channel_id": 67
},
{
"id": 240,
"user_id": 1,
"task_id": "package_128_113",
"channel_version_id": 128,
"game_version_id": 113,
"extend_id": 0,
"type": "pack",
"status": 0,
"remark": "",
"cast_time": 0,
"created_at": "1500458454",
"updated_at": "1500458454",
"user_name": "admin",
"format_created_at": "2017-07-19 18:00:54",
"format_updated_at": "2017-07-19 18:00:54",
"game": "x",
"channel": "y",
"game_id": 11290,
"channel_id": 67
}
]
}

您可能感兴趣的文章:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  DataTable插件 异步