DataTables ajax获取数据设置

本文详细介绍了如何使用DataTables库将复杂数据以表格形式展示,并提供了关键配置代码及功能解析,帮助开发者轻松实现数据的高效管理和交互式查看。
网上很多零散的设置代码,但是版本更迭之后大多会出问题,最近公司一直在用DataTables,走了一些弯路,总算是大概做了出来,我把代码贴出来,需要用的同学参考一下。


$('#example').DataTable({
"bDestory" : true,
"bProcessing" : true,
"serverSide": true,//如果数据量不大,建议设置为false
"bSort" : true, // 排序功能
"searching" : false,//自带搜索,简单查询很方便
"sPaginationType" : "full_numbers",//分页类型
"ajax" : url,//ajax提交地址
"iDisplayLength" : 50, // 默认显示的记录数
"oLanguage" : {
"sProcessing" : "<img src='"+ XFrame.getContextPath()
+ "/assets/img/loading.gif' />",
"sLengthMenu" : "每页显示 _MENU_ 条记录",
"sZeroRecords" : "抱歉, 没有找到",
"sInfo" : "从 _START_ 到 _END_ /共 _TOTAL_ 条数据",
"sInfoEmpty" : "没有数据",
"sInfoFiltered" : "(从 _MAX_ 条数据中检索)",
"sSearch" : "搜索:",
"oPaginate" : {
"sFirst" : "首页",
"sPrevious" : "前一页",
"sNext" : "后一页",
"sLast" : "尾页"
},
"sZeroRecords" : "没有检索到数据",
},
"columns" : [ { //对应数据返回的字段名
"data" : "eventId"}, {
"data" : "source"}, {
"data" : "userId"}, {
"data" : "account"}, {
"data" : "level"}, {
"data" : "url"}, {
"data" : "createTime"} ],
"columnDefs" : [ {//自定义列
"targets" : [ 7 ], // 目标列位置,下标从0开始
"data" : "eventId", // 数据列名
"render" : function(data, type, full) { // 返回自定义内容
return "<a href=\"javascript:Member.log('"
+ data
+ "')\">删除</a>";
}
} ]
});
DataTables 中有客户端处理和服务器端处理两种方式处理数据,在实现分页加载数据时,一般采用服务器端处理方式(ServerSide),即数据处理在服务器上执行,页面只处理当前页的数据(物理分页),开启服务端模式需设置 `ServerSide: true` [^1]。 以下是使用 PHP、DataTablesAJAX 实现分页加载数据的详细步骤和示例代码: ### 前端部分(HTML 和 JavaScript) 在 HTML 文件中引入必要的 CSS 和 JavaScript 文件,创建表格并使用 DataTables 初始化表格,通过 AJAX 请求服务器端数据。 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>DataTables Pagination with AJAX and PHP</title> <!-- 引入 DataTables 的 CSS 和 JavaScript 文件 --> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.25/css/jquery.dataTables.min.css"> <script type="text/javascript" src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script type="text/javascript" src="https://cdn.datatables.net/1.10.25/js/jquery.dataTables.min.js"></script> </head> <body> <!-- 创建表格 --> <table id="example" class="display" style="width:100%"> <thead> <tr> <th>ID</th> <th>Name</th> <th>Birthday</th> </tr> </thead> </table> <script> $(document).ready(function() { $('#example').DataTable({ "processing": true, "serverSide": true, "ajax": { "url": "data.php", // 服务器端脚本的 URL "type": "POST" }, "columns": [ { "data": "id" }, { "data": "name" }, { "data": "birthday" } ] }); }); </script> </body> </html> ``` ### 后端部分(PHP) 在 PHP 文件中处理 AJAX 请求,根据 DataTables 发送的参数进行分页查询,并返回 JSON 格式的数据。 ```php <?php // 模拟数据库连接 // 实际使用时需要替换为真实的数据库连接信息 $servername = "localhost"; $username = "your_username"; $password = "your_password"; $dbname = "your_database"; $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接是否成功 if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // 获取 DataTables 发送的参数 $draw = $_POST['draw']; $start = $_POST['start']; $length = $_POST['length']; // 模拟查询数据 $sql = "SELECT * FROM your_table LIMIT $start, $length"; $result = $conn->query($sql); $data = array(); while ($row = $result->fetch_assoc()) { $data[] = $row; } // 模拟总记录数 $totalRecords = 100; // 实际使用时需要查询数据库获取真实的总记录数 // 构建响应数据 $response = array( "draw" => intval($draw), "recordsTotal" => $totalRecords, "recordsFiltered" => $totalRecords, "data" => $data ); // 返回 JSON 格式的数据 echo json_encode($response); $conn->close(); ?> ``` ### 代码解释 - **前端部分**: - 引入 DataTables 的 CSS 和 JavaScript 文件。 - 创建一个表格,并使用 `DataTable` 方法初始化表格,设置 `serverSide` 为 `true` 开启服务器端处理模式。 - 通过 `ajax` 选项指定服务器端脚本的 URL,并设置请求类型为 `POST`。 - 使用 `columns` 选项定义表格的列。 - **后端部分**: - 连接数据库。 - 获取 DataTables 发送的参数,包括 `draw`、`start` 和 `length`。 - 根据参数进行分页查询,并将查询结果存储在 `$data` 数组中。 - 模拟总记录数,实际使用时需要查询数据库获取真实的总记录数。 - 构建响应数据,包括 `draw`、`recordsTotal`、`recordsFiltered` 和 `data`。 - 返回 JSON 格式的数据。 ### 注意事项 - 请根据实际情况替换数据库连接信息和表名。 - 实际使用时需要对用户输入进行过滤和验证,以防止 SQL 注入攻击。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值