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

罗宪
2023-12-01

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

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

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

var TableManaged = function () {

var initTable1 = function () {

var table = $('#sample_1');

var searchParams = {};

// begin first table

table.dataTable({



// Internationalisation. For more info refer to http://datatables.net/manual/i18n

"language": {

"aria": {

"sortAscending": ": activate to sort column ascending",

"sortDescending": ": activate to sort column descending"

},

"emptyTable": "No data available in table",

"info": "Showing _START_ to _END_ of _TOTAL_ records",

"infoEmpty": "No records found",

"infoFiltered": "(filtered1 from _MAX_ total records)",

"lengthMenu": "Show _MENU_ records",

"search": "Search:",

"zeroRecords": "No matching records found",

"paginate": {

"previous":"Prev",

"next": "Next",

"last": "Last",

"first": "First"

}

},



// Or you can use remote translation file

//"language": {

// url: '//cdn.datatables.net/plug-ins/3cfcc339e89/i18n/Portuguese.json'

//},



// Uncomment below line("dom" parameter) to fix the dropdown overflow issue in the datatable cells. The default datatable layout

// setup uses scrollable div(table-scrollable) with overflow:auto to enable vertical scroll(see: assets/global/plugins/datatables

/plugins/bootstrap/dataTables.bootstrap.js).

// So when dropdowns used the scrollable div should be removed.

//"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>>",

paging: true,

bFilter:false,

"bStateSave": true, // save datatable state(pagination, sort, etc) in cookie.

"lengthMenu": [

[5, 15, 20,25,50],

[5, 15, 20,25,50] // change per page values here

],

// set the initial value

"pageLength": 20,

"serverSide" : true,// 服务器端分页处理

// //当处理大数据时,延迟渲染数据,有效提高Datatables处理能力

"deferRender": true,

// "sAjaxDataProp" : "aData",//是服务器分页的标志,必须有

// "fnServerData": retrieveData,//分页回调函数

ajax: function (data, callback,

settings) {//ajax配置为function,手动调用异步查询

searchParams.pageSize = data.length;

searchParams.pageNum = data.start % data.length === 0 ?

                (data.start / data.length+1) :((data.start% data.length) +2);

console.log(requestUrl.baseUrl+requestUrl.queryAlarmInfoList)

$.ajax({

type: "GET",

url: requestUrl.baseUrl+requestUrl.queryAlarmInfoList,

cache: false, //禁用缓存

data: searchParams, //传入已封装的参数

dataType: "json",

success: function (res) {

data.pageNum +=1;

var lists = res.data;

//封装返回数据,这里仅演示了修改属性名

var returnData = {};

returnData.draw =data.draw;//这里直接自行返回了draw计数器,应该由后台返回

returnData.recordsTotal = lists.pages;

returnData.recordsFiltered = lists.total;//后台不实现过滤功能,每次查询均视作全部结果

returnData.data = lists.list;

//关闭遮罩

//$wrapper.spinModal(false);

//调用DataTables提供的callback方法,代表数据已封装完成并传回DataTables进行渲染

//此时的数据需确保正确无误,异常判断应在执行此回调前自行处理完毕

if(searchParams){

$.extend(searchParams,searchParams);

}

callback(returnData);

},

error: function (

XMLHttpRequest,

textStatus,

errorThrown) {

Toast('查询失败','warning','danger');

}

});

},

columns:[

{"data":"createTime"},

{"data":"equipCode"},

{"data":"pointCode"},

{"data":"value"},

{"data":"ruleName"},

{"data":"windowStart"},

{"data":"windowEnd"},

{"data":"",

"class":"operation",

"render": function(data, type, row) {

return "<a target='_blank' class='map' windowStart='"+row.windowStart+"'

windowEnd='"+row.windowEnd+"' pointCode='"+row.pointCode+"' equipCode='"+row.equipCode+"'>趋势图</a>

<a ruleId = "+row.ruleId+" class='queryDetailInfo'>查看报警规则</a>";

}

}

],

"pagingType": "bootstrap_full_number",

"columnDefs": [{ // set default column settings

'orderable': false,

'targets': [0]

}, {

"searchable": false,

"targets": [0]

}],

"order": [

[1, "asc"]

] // set first column as a default sort by asc

});



}



return {



//main function to initiate the module

init: function () {

if (!jQuery().dataTable) {

return;

}



initTable1();

// initTable2();

// initTable3();

}



};



}();



paging:true //是否进行分页。

serverSide: false //是否从服务端进行分页。。true则进行后台分页。。false为前端分页。。如果要进行后端分页,则必须

columns:要展示的数据,必须跟后台字段名称一致。。。,如果第一列为checkbox很多同学,就不会,,在此说明一下。。

可以通过render追加样式,以及属性。。columns是表格thead里面,如果要给tbody里面的第一列指定checkbox,则要用到columnsDef属性。。可以对指定列设置是否可以对此列搜索,排序等等等。



columns:[

{"data":"createTime"},

{"data":"equipCode"},

{"data":"pointCode"},

{"data":"value"},

{"data":"ruleName"},

{"data":"windowStart"},

{"data":"windowEnd"},

{"data":"",

"class":"operation",

"render": function(data, type, row) {

return "<a target='_blank' class='map' windowStart='"+row.windowStart+"'

windowEnd='"+row.windowEnd+"' pointCode='"+row.pointCode+"' equipCode='"+row.equipCode+"'>趋势图</a>

<a ruleId = "+row.ruleId+" class='queryDetailInfo'>查看报警规则</a>";

}

}

],

"columnDefs": [{ // set default column settings

'orderable': false,

'targets': [0]

}, {

"searchable": false,

"targets": [0]

}],

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

看上面的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

希望对同学们有帮助哦!

 类似资料: