DataTables 是一个 jQuery 插件,可以更轻松地在网页上添加分页。
只需要添加记录列表,它就会自动调整数据并创建具有搜索和排序功能的分页。
有一些选项可用于实现AJAX 分页。
在本教程中,我将展示如何使用 PHP 在 DataTables 中实现 AJAX 分页。
1.表结构
创建employee 表。
CREATE TABLE `employee` (
`id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`emp_name` varchar(80) NOT NULL,
`salary` varchar(20) NOT NULL,
`gender` varchar(10) NOT NULL,
`city` varchar(80) NOT NULL,
`email` varchar(80) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.配置
config.php 为数据库创建一个连接。
代码
<?php
$host = "localhost"; /* Host name */
$user = "root"; /* User */
$password = ""; /* Password */
$dbname = "tutorial"; /* Database name */
$con = mysqli_connect($host, $user, $password,$dbname);
// Check connection
if (!$con) {
die("Connection failed: " . mysqli_connect_error());
}
3.下载并包含
- 从这里下载DataTables 。
- 在
<head> 部分引用datatables.min.css 和datatables.min.js ,还包括 jQuery 库。 - 您也可以使用 CDN。
<!-- Datatable CSS -->
<link href='//cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css' rel='stylesheet' type='text/css'>
<!-- jQuery Library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<!-- Datatable JS -->
<script src="//cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
4.?HTML
创建<table id='empTable' class='display dataTable'> 并添加列名?<thead> 。
代码
<!-- Datatable CSS -->
<link href='//cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css' rel='stylesheet' type='text/css'>
<!-- jQuery Library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<!-- Datatable JS -->
<script src="//cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<!-- Table -->
<table id='empTable' class='display dataTable'>
<thead>
<tr>
<th>Employee name</th>
<th>Email</th>
<th>Gender</th>
<th>Salary</th>
<th>City</th>
</tr>
</thead>
</table>
5.脚本
在?<table id='empTable'> 上初始化 DataTable。
在方法中传递选项以启用服务器端处理并将 AJAX 发布请求发送到ajaxfile.php .
在columns AJAX 成功回调时读取的选项传递字段名称。
代码
$(document).ready(function(){
$('#empTable').DataTable({
'processing': true,
'serverSide': true,
'serverMethod': 'post',
'ajax': {
'url':'ajaxfile.php'
},
'columns': [
{ data: 'emp_name' },
{ data: 'email' },
{ data: 'gender' },
{ data: 'salary' },
{ data: 'city' },
]
});
});
6.?PHP
创建一个新的ajaxfile.php .
读取$_POST 值并存储在 AJAX 请求期间 DataTable 传递的变量中 - 绘制、开始、长度、顺序、列索引、列名、顺序和搜索。
如果$searchValue 不为空,则准备搜索查询。
计算employee 表中记录的总数。
使用employee 表中的搜索过滤器计算记录总数。
两个计数在第一次返回相同的值。不同之处在于,当从 DataTable 中搜索值时,带有过滤器的记录计数将用于显示 – 从 DataTable 中的总记录中过滤的记录数。
从employee 表中获取记录。
循环记录并$data 使用关联数组初始化Array。在 Array 中,key 将与columns DataTable 初始化时在option 中定义的相同。
准备$response 一个具有 draw、iTotalRecords、iTotalDisplayRecords 和 aaData 键的数组。
返回$response JSON 格式。
代码
<?php
## Database configuration
include 'config.php';
## Read value
$draw = $_POST['draw'];
$row = $_POST['start'];
$rowperpage = $_POST['length']; // Rows display per page
$columnIndex = $_POST['order'][0]['column']; // Column index
$columnName = $_POST['columns'][$columnIndex]['data']; // Column name
$columnSortOrder = $_POST['order'][0]['dir']; // asc or desc
$searchValue = mysqli_real_escape_string($con,$_POST['search']['value']); // Search value
## Search
$searchQuery = " ";
if($searchValue != ''){
$searchQuery = " and (emp_name like '%".$searchValue."%' or
email like '%".$searchValue."%' or
city like'%".$searchValue."%' ) ";
}
## Total number of records without filtering
$sel = mysqli_query($con,"select count(*) as allcount from employee");
$records = mysqli_fetch_assoc($sel);
$totalRecords = $records['allcount'];
## Total number of record with filtering
$sel = mysqli_query($con,"select count(*) as allcount from employee WHERE 1 ".$searchQuery);
$records = mysqli_fetch_assoc($sel);
$totalRecordwithFilter = $records['allcount'];
## Fetch records
$empQuery = "select * from employee WHERE 1 ".$searchQuery." order by ".$columnName." ".$columnSortOrder." limit ".$row.",".$rowperpage;
$empRecords = mysqli_query($con, $empQuery);
$data = array();
while ($row = mysqli_fetch_assoc($empRecords)) {
$data[] = array(
"emp_name"=>$row['emp_name'],
"email"=>$row['email'],
"gender"=>$row['gender'],
"salary"=>$row['salary'],
"city"=>$row['city']
);
}
## Response
$response = array(
"draw" => intval($draw),
"iTotalRecords" => $totalRecords,
"iTotalDisplayRecords" => $totalRecordwithFilter,
"aaData" => $data
);
echo json_encode($response);
7.结论
确保 AJAX 响应数据中的字段名称应与columns DataTable 初始化期间数据中定义的字段名称相同,否则不会读取字段值。
serverMethod 如果您想发送 GET 类型的 AJAX 请求,请删除选项,那么您还需要更新 AJAX 文件。
?
|