這篇文章主要介紹如何使用DataTable插件實現異步加載數據,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
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插件實現異步加載數據”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。