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


Posted in Javascript onNovember 19, 2017

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
  }
 ]
}
Javascript 相关文章推荐
ExtJS Window 最小化的一种方法
Nov 18 Javascript
基于jquery的direction图片渐变动画效果
May 24 Javascript
jquery.validate使用攻略 第一部
Jul 01 Javascript
基于jquery实现的表格分页实现代码
Jun 21 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
Jun 06 Javascript
JS 使用for循环遍历子节点查找元素
Sep 06 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
May 11 Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
Apr 10 Javascript
vue技术分享之你可能不知道的7个秘密
Apr 09 Javascript
浅谈JS对象添加getter与setter的5种方法
Jun 09 Javascript
小程序外卖订单界面的示例代码
Dec 30 Javascript
浅谈node.js中间件有哪些类型
Apr 29 Javascript
原生JavaScript实现Ajax异步请求
Nov 19 #Javascript
gulp安装以及打包合并的方法教程
Nov 19 #Javascript
js实现rem自动匹配计算font-size的示例
Nov 18 #Javascript
如何编写一个完整的Angular4 FormText 组件
Nov 18 #Javascript
Angular中支持SCSS的方法
Nov 18 #Javascript
VUE element-ui 写个复用Table组件的示例代码
Nov 18 #Javascript
jQuery实现checkbox的简单操作
Nov 18 #jQuery
You might like
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
php实现每天自动变换随机问候语的方法
2015/05/12 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
2015/07/31 PHP
三种检测iPhone/iPad设备方向的方法
2014/04/23 Javascript
JavaScript中的闭包(Closure)详细介绍
2014/12/30 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
JS实现slide文字框缩放伸展效果代码
2015/11/05 Javascript
Vue.js每天必学之内部响应式原理探究
2016/09/07 Javascript
KnockoutJS 3.X API 第四章之click绑定
2016/10/10 Javascript
vuejs指令详解
2017/02/07 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
2018/01/26 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
vue 双向数据绑定的实现学习之监听器的实现方法
2018/11/30 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
解决layer 关闭当前弹窗 关闭遮罩层 input值获取不到的问题
2019/09/25 Javascript
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
python模拟登录百度代码分享(获取百度贴吧等级)
2013/12/27 Python
基于wxpython实现的windows GUI程序实例
2015/05/30 Python
Python线程详解
2015/06/24 Python
浅谈python可视化包Bokeh
2018/02/07 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
django框架创建应用操作示例
2019/09/26 Python
python框架flask表单实现详解
2019/11/04 Python
解决Python pip 自动更新升级失败的问题
2020/02/21 Python
HTML5时代CSS设置漂亮字体取代图片
2014/09/04 HTML / CSS
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
《十六年前的回忆》教学反思
2014/02/14 职场文书
2014庆六一活动方案
2014/03/02 职场文书
村党支部书记承诺书
2014/05/29 职场文书
夫妻忠诚协议范文
2014/11/16 职场文书
优秀教师先进事迹材料
2014/12/15 职场文书
2015年前台个人工作总结
2015/04/03 职场文书
教你怎么用Python处理excel实现自动化办公
2021/04/30 Python