天天看點

datatables元件加載資料

使用jquery的datatables插件渲染表格元件時,最佳的方法如下:

  • 全局定義dataTables對象變量;
  • 頁面加載時初始化dataTables對象;
  • 查詢時,使用dataTables對象的api加載資料;
<%@ page language="java"  pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <%@ include file="common.jsp" %>
  <script type="text/javascript" src="<%=basePath %>js/datatables.min.js"></script>
  <link rel="stylesheet" type="text/css" href="<%=basePath %>css/datatables.min.css" />
</head>

<body>
  <div class="text-c" style="padding:9px;height:auto;" align="left">
    <button name="" id="" class="btn btn-success" type="submit" onclick="gridSearch();">查詢</button>
  </div>

  <div style="width:98%" id="tb1">
    <table id="dataTableTest" class="table table-border table-bordered table-bg table-hover table-striped table-responsive">
      <thead>
        <tr class="text-c">
          <th>
            <div style="width:75px">測試1</div>
          </th>
          <th>
            <div style="width:75px">測試2</div>
          </th>
          <th>
            <div style="width:75px">測試3</div>
          </th>
        </tr>
      </thead>
    </table>
  </div>
  <br />

  <div style="width:98%" id="tb2">
    <table id="dataTableTest1" class="table table-border table-bordered table-bg  table-sort table-responsive">
      <thead>
        <tr class="text-c">
          <th>
            <div style="width:75px">a1</div>
          </th>
          <th>
            <div style="width:75px">a2</div>
          </th>
          <th>
            <div style="width:75px">a3</div>
          </th>
        </tr>
      </thead>
      <tbody></tbody>
    </table>
  </div>
  <br>
  <br>

</body>
<script>
  

  var dataTable,dataTable1;
  $(function () {
    //初始化dataTables對象
    dataTable = $("#dataTableTest").DataTable({
      bFilter: false, //是否啟動過濾、搜尋功能 
      bLengthChange: false,//是否顯示一個每頁長度的選擇條(需要分頁器支援)
      bSort: false,//是否啟動各個字段的排序功能  
      bPaginate: false,//是否顯示(應用)分頁器  
      bInfo: false,//是否顯示頁腳資訊,DataTables插件左下角顯示記錄數  
      stripeClasses: ["table-striped", "even"],// 為奇偶行加上樣式,相容不支援CSS僞類的場合
      destroy: true,//解決Cannot reinitialise DataTable
      columns: [
        { "data": "rpage", "defaultContent": "", "width": "50%" },
        { "data": "cnt", "defaultContent": "", "width": "20%" },
        { "data": "stime", "defaultContent": "", "width": "30%" }
      ]
    });
    
    dataTable1 = $("#dataTableTest1").DataTable({
      processing: true,
      bFilter: false, //是否啟動過濾、搜尋功能 
      bSort: false,//是否啟動各個字段的排序功能  
      bPaginate: true,//是否顯示(應用)分頁器  
      iDisplayLength: 500,
      bLengthChange: false,//是否顯示一個每頁長度的選擇條(需要分頁器支援)
      bInfo: false,//是否顯示頁腳資訊,DataTables插件左下角顯示記錄數
      destroy: true,
      columns: [{ "data": "rpage" },
      { "data": "recSource" },
      { "data": "contentid" },
      { "data": "name" },
      { "data": "itemType" },
      { "data": "channel" },
      { "data": "uploadId" },
      { "data": "category" },
      { "data": "tag" },
      { "data": "stime" },
      { "data": "r_eventid", "visible": false }],
      rowCallback: function (row, aData, index) {
        $(row).css('background', rowcolourall[aData.colourid]);
      }
    });
  });
  
  function gridSearch() {
    var uid = $("#uid").val();
    if (uid == "") {
      $.messager.alert('錯誤', '請輸入正确的uid!', 'error');
      return;
    } else {
      var fid = $("#fid").val();
      var t1 = $("#t1").val();
      var t2 = $("#t2").val();

      //drawTableTest不分頁
      var totalUrl = '<%=basePath %>/tm/gridQuery?type=1&uid=' + uid + '&fids=' + fid + '&t1=' + t1 + '&t2=' + t2;
      $.doAjax({
        async: false,
        url: totalUrl,
        callback: function (_data) {
          //alert(_data.msg);
          dataTable.clear();
          if (_data.code == 'V00000') {
            dataTable.rows.add(_data.data).draw();  
          } else {
            $.messager.alert('提示', _data.msg || '系統故障!', 'error');
            dataTable.draw();
            return;
          }
        }
      });

      //drawTableTese1:分頁表格
      var bg = $("#checkbox-bg").is(":checked");
      if (bg) {
        var url2 = '<%=basePath %>/tm/gridQueryPaging?type=2&uid=' + uid + '&fids=' + fid + '&t1=' + t1 + '&t2=' + t2;
        var pageinfo = dataTable1.page.info();
        //var pageinfo = $('#dataTableTest1').DataTable().page.info();
        var param = {};
        param.startIndex = pageinfo.start;//起始位置
        param.pageSize = pageinfo.length;//一頁大小
        param.page = (pageinfo.start / pageinfo.length) + 1;//目前頁碼
        $.doAjax({
          async: true,
          data: param,
          url: url2,
          maskLoad: true,
          callback: function (_data) {
            dataTable1.clear();
            if (_data.code == 'V00000') {
              var len = _data.data.pageData.length;
  
              var resData = _data.data;
              var returnData = {};
              returnData.draw = resData.draw;
              returnData.recordsTotal = resData.total;
              returnData.recordsFiltered = resData.total;//背景不實作過濾功能,每次查詢均視作全部結果
              //returnData.data = resData.pageData;
              returnData.data = [];
              for (var i = 0; i < resData.pageData.length; i++) {
                var dat = {};
                var rpage = resData.pageData[i].rpage + "<br><button id=\"event\">RequestId</button>";
                dat.rpage = (resData.pageData[i].rpage != null) ? rpage : "";
                dat.recSource = (resData.pageData[i].recSource != null) ? resData.pageData[i].recSource : "";
                dat.contentid = (resData.pageData[i].contentid != null) ? resData.pageData[i].contentid : "";
                returnData.data.push(dat);
              }
              for (var i = 0; i < returnData.data.length; i++) {
                dataTable1.row.add(returnData.data[i]);
              }
            } else {
              $.messager.alert('提示', _data.msg || '系統故障!', 'error');
              return;
            }
            dataTable1.draw();
          }
        });
      } else {
        $('#dataTableTest1').DataTable().clear().draw();
      } 
    }
  }

</script>

</html>