使用jquery.DataTable.js 展示数据,并进行后台分页。

迈不过友情╰ 2021-09-20 02:42 905阅读 0赞

话不多说,直接上干货。。

要使用jquery.DataTable展现数据,比如引入jquery.js,jquery.DataTable.js,如果这个不会,建议从入门到放弃。

1、使用jquery.DataTable展现数据。

  1. var TableManaged = function () {
  2. var initTable1 = function () {
  3. var table = $('#sample_1');
  4. var searchParams = {};
  5. // begin first table
  6. table.dataTable({
  7. // Internationalisation. For more info refer to http://datatables.net/manual/i18n
  8. "language": {
  9. "aria": {
  10. "sortAscending": ": activate to sort column ascending",
  11. "sortDescending": ": activate to sort column descending"
  12. },
  13. "emptyTable": "No data available in table",
  14. "info": "Showing _START_ to _END_ of _TOTAL_ records",
  15. "infoEmpty": "No records found",
  16. "infoFiltered": "(filtered1 from _MAX_ total records)",
  17. "lengthMenu": "Show _MENU_ records",
  18. "search": "Search:",
  19. "zeroRecords": "No matching records found",
  20. "paginate": {
  21. "previous":"Prev",
  22. "next": "Next",
  23. "last": "Last",
  24. "first": "First"
  25. }
  26. },
  27. // Or you can use remote translation file
  28. //"language": {
  29. // url: '//cdn.datatables.net/plug-ins/3cfcc339e89/i18n/Portuguese.json'
  30. //},
  31. // Uncomment below line("dom" parameter) to fix the dropdown overflow issue in the datatable cells. The default datatable layout
  32. // setup uses scrollable div(table-scrollable) with overflow:auto to enable vertical scroll(see: assets/global/plugins/datatables
  33. /plugins/bootstrap/dataTables.bootstrap.js).
  34. // So when dropdowns used the scrollable div should be removed.
  35. //"dom": "<'row'<'col-md-6 col-sm-12'l><'col-md-6 col-sm-12'f>r>t<'row'<'col-md-5 col-sm-12'i><'col-md-7 col-sm-12'p>>",
  36. paging: true,
  37. bFilter:false,
  38. "bStateSave": true, // save datatable state(pagination, sort, etc) in cookie.
  39. "lengthMenu": [
  40. [5, 15, 20,25,50],
  41. [5, 15, 20,25,50] // change per page values here
  42. ],
  43. // set the initial value
  44. "pageLength": 20,
  45. "serverSide" : true,// 服务器端分页处理
  46. // //当处理大数据时,延迟渲染数据,有效提高Datatables处理能力
  47. "deferRender": true,
  48. // "sAjaxDataProp" : "aData",//是服务器分页的标志,必须有
  49. // "fnServerData": retrieveData,//分页回调函数
  50. ajax: function (data, callback,
  51. settings) {//ajax配置为function,手动调用异步查询
  52. searchParams.pageSize = data.length;
  53. searchParams.pageNum = data.start % data.length === 0 ?
  54. (data.start / data.length+1) :((data.start% data.length) +2);
  55. console.log(requestUrl.baseUrl+requestUrl.queryAlarmInfoList)
  56. $.ajax({
  57. type: "GET",
  58. url: requestUrl.baseUrl+requestUrl.queryAlarmInfoList,
  59. cache: false, //禁用缓存
  60. data: searchParams, //传入已封装的参数
  61. dataType: "json",
  62. success: function (res) {
  63. data.pageNum +=1;
  64. var lists = res.data;
  65. //封装返回数据,这里仅演示了修改属性名
  66. var returnData = {};
  67. returnData.draw =data.draw;//这里直接自行返回了draw计数器,应该由后台返回
  68. returnData.recordsTotal = lists.pages;
  69. returnData.recordsFiltered = lists.total;//后台不实现过滤功能,每次查询均视作全部结果
  70. returnData.data = lists.list;
  71. //关闭遮罩
  72. //$wrapper.spinModal(false);
  73. //调用DataTables提供的callback方法,代表数据已封装完成并传回DataTables进行渲染
  74. //此时的数据需确保正确无误,异常判断应在执行此回调前自行处理完毕
  75. if(searchParams){
  76. $.extend(searchParams,searchParams);
  77. }
  78. callback(returnData);
  79. },
  80. error: function (
  81. XMLHttpRequest,
  82. textStatus,
  83. errorThrown) {
  84. Toast('查询失败','warning','danger');
  85. }
  86. });
  87. },
  88. columns:[
  89. {"data":"createTime"},
  90. {"data":"equipCode"},
  91. {"data":"pointCode"},
  92. {"data":"value"},
  93. {"data":"ruleName"},
  94. {"data":"windowStart"},
  95. {"data":"windowEnd"},
  96. {"data":"",
  97. "class":"operation",
  98. "render": function(data, type, row) {
  99. return "<a target='_blank' class='map' windowStart='"+row.windowStart+"'
  100. windowEnd='"+row.windowEnd+"' pointCode='"+row.pointCode+"' equipCode='"+row.equipCode+"'>趋势图</a>
  101. <a ruleId = "+row.ruleId+" class='queryDetailInfo'>查看报警规则</a>";
  102. }
  103. }
  104. ],
  105. "pagingType": "bootstrap_full_number",
  106. "columnDefs": [{ // set default column settings
  107. 'orderable': false,
  108. 'targets': [0]
  109. }, {
  110. "searchable": false,
  111. "targets": [0]
  112. }],
  113. "order": [
  114. [1, "asc"]
  115. ] // set first column as a default sort by asc
  116. });
  117. }
  118. return {
  119. //main function to initiate the module
  120. init: function () {
  121. if (!jQuery().dataTable) {
  122. return;
  123. }
  124. initTable1();
  125. // initTable2();
  126. // initTable3();
  127. }
  128. };
  129. }();
  130. pagingtrue //是否进行分页。
  131. serverSide: false //是否从服务端进行分页。。true则进行后台分页。。false为前端分页。。如果要进行后端分页,则必须
  132. columns:要展示的数据,必须跟后台字段名称一致。。。,如果第一列为checkbox很多同学,就不会,,在此说明一下。。
  133. 可以通过render追加样式,以及属性。。columns是表格thead里面,如果要给tbody里面的第一列指定checkbox,则要用到columnsDef属性。。可以对指定列设置是否可以对此列搜索,排序等等等。
  134. columns:[
  135. {"data":"createTime"},
  136. {"data":"equipCode"},
  137. {"data":"pointCode"},
  138. {"data":"value"},
  139. {"data":"ruleName"},
  140. {"data":"windowStart"},
  141. {"data":"windowEnd"},
  142. {"data":"",
  143. "class":"operation",
  144. "render": function(data, type, row) {
  145. return "<a target='_blank' class='map' windowStart='"+row.windowStart+"'
  146. windowEnd='"+row.windowEnd+"' pointCode='"+row.pointCode+"' equipCode='"+row.equipCode+"'>趋势图</a>
  147. <a ruleId = "+row.ruleId+" class='queryDetailInfo'>查看报警规则</a>";
  148. }
  149. }
  150. ],
  151. "columnDefs": [{ // set default column settings
  152. 'orderable': false,
  153. 'targets': [0]
  154. }, {
  155. "searchable": false,
  156. "targets": [0]
  157. }],

以上基础框架搭建好以后,接着就是请求后台数据了。。

看上面的ajax属性。。。

**有几个重要字段,就是returnData里面的属性。。下面说明一下。。

很多人觉得对dataTable的使用没问题,但是数据就是展示不出来。。

1、draw属性,必须跟后台返回的draw一致。。。如果后台没给你,则使用data参数的draw属性。。

2、recordsTotal属性,告诉dataTable总页数

3、recordsFiltered属性,告诉dataTable总记录数。

4、data属性。。数据从哪个字段里面取。。

最重要的是,这些设置好了之后,如何传给dataTable
callback(returnData);
大家注意下最后一点:
我自己写的这个是jquery对象。。如果要使用dataTable对象属性的方法。。需要加上.api()方法。。**

就是里面的table.api();

如果改变了搜索内容,不想重新写ajax方法。。

可以使用table.api().ajax.reload()方法。。

另外,默认的搜索参数是dataTable里面的所有列,看起来很恶心。。

可以自定义搜索参数,每次传参用自定义的searchparams

希望对同学们有帮助哦!

发表评论

表情:
评论列表 (有 0 条评论,905人围观)

还没有评论,来说两句吧...

相关阅读

    相关 使用Laypage进行

    使用Laypage进行分页 Laypage是一款简单,方便的分页插件,无需写过多的js代码 只需要向后台传入当前页数(由于本人偷懒在JS中写死了pageSize)