下面我将详细讲解“PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】”的完整攻略。
本篇攻略详细讲解如何使用PHP+Ajax实现无刷新分页功能,使网站用户能够在不刷新整个页面的情况下浏览分页内容。该攻略主要包含以下两条示例说明:
首先需要创建一个数据表来存储要进行分页的数据,可以使用以下的SQL语句创建一个名为“users”的数据表:
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
接下来需要向“users”表中添加一些测试数据。可以使用以下的SQL语句:
INSERT INTO `users` (`name`, `age`) VALUES
('张三', 18),
('李四', 20),
('王五', 22),
('赵六', 24),
('钱七', 26),
('孙八', 28),
('周九', 30),
('吴十', 32);
在PHP页面中,我们可以使用以下代码实现分页功能:
<?php
//数据库连接参数
$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "test";
//建立连接
$conn = new mysqli($servername, $username, $password, $dbname);
//检查连接是否成功
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
//每页显示的数据条数
$pageSize = 3;
//当前页数
$page = intval($_GET['page']);
//计算数据的总数
$sql = "SELECT count(*) as count FROM `users`";
$result = $conn->query($sql);
$count = intval($result->fetch_assoc()['count']);
//计算总共的页数
$pageCount = ceil($count / $pageSize);
//计算当前页要显示的数据的起始位置
$startIndex = ($page - 1) * $pageSize;
//查询数据
$sql = "SELECT * FROM `users` LIMIT $startIndex, $pageSize";
$result = $conn->query($sql);
//将数据格式化为JSON格式输出
$data = array();
while ($row = $result->fetch_assoc()) {
array_push($data, $row);
}
echo json_encode(array('data' => $data, 'pageCount' => $pageCount));
//关闭数据库连接
$conn->close();
?>
创建一个HTML页面,用于显示分页数据,并通过Ajax获取分页数据。代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>无刷新分页</title>
<script src="http://cdn.bootcss.com/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript">
function loadData(page) {
$.ajax({
url: 'data.php',
type: 'get',
dataType: 'json',
data: {
page: page
},
success: function (data) {
var html = '';
for (var i = 0; i < data.data.length; i++) {
html += '<tr>';
html += '<td>' + data.data[i].id + '</td>';
html += '<td>' + data.data[i].name + '</td>';
html += '<td>' + data.data[i].age + '</td>';
html += '</tr>';
}
$('table tbody').html(html);
var pageCount = data.pageCount;
var pageHtml = '';
for (var i = 1; i <= pageCount; i++) {
if (i == page) {
pageHtml += '<li class="active"><a href="#">' + i + '</a></li>';
} else {
pageHtml += '<li><a href="#" onclick="loadData(' + i + ')">' + i + '</a></li>';
}
}
$('.pagination').html(pageHtml);
}
});
}
$(function () {
loadData(1);
});
</script>
</head>
<body>
<table>
<thead>
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<ul class="pagination">
</ul>
</body>
</html>
将上述代码保存,并在浏览器中运行HTML页面,即可看到无刷新分页功能的效果。
在示例1的基础上,我们可以进一步添加搜索和排序功能。
要添加搜索功能,我们需要向HTML页面中添加一个搜索框,并在Ajax请求中添加一个名为“keyword”的参数。接着修改PHP中的查询语句,将SELECT子句修改为“SELECT * FROM users
WHERE name
LIKE '%".$keyword."%'”即可实现搜索功能。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>无刷新分页</title>
<script src="http://cdn.bootcss.com/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript">
function loadData(page, keyword) {
$.ajax({
url: 'data.php',
type: 'get',
dataType: 'json',
data: {
page: page,
keyword: keyword
},
success: function (data) {
var html = '';
for (var i = 0; i < data.data.length; i++) {
html += '<tr>';
html += '<td>' + data.data[i].id + '</td>';
html += '<td>' + data.data[i].name + '</td>';
html += '<td>' + data.data[i].age + '</td>';
html += '</tr>';
}
$('table tbody').html(html);
var pageCount = data.pageCount;
var pageHtml = '';
for (var i = 1; i <= pageCount; i++) {
if (i === page) {
pageHtml += '<li class="active"><a href="#">' + i + '</a></li>';
} else {
pageHtml += '<li><a href="#" onclick="loadData(' + i + ', \'' + keyword + '\')">' + i + '</a></li>';
}
}
$('.pagination').html(pageHtml);
}
});
}
$(function () {
loadData(1, '');
$('#btnSearch').on('click', function () {
loadData(1, $('#txtKeyword').val());
});
});
</script>
</head>
<body>
<table>
<thead>
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<form>
<label for="txtKeyword">关键字:</label>
<input type="text" id="txtKeyword">
<button type="button" id="btnSearch">搜索</button>
</form>
<ul class="pagination">
</ul>
</body>
</html>
添加排序功能需要向HTML页面中添加两个可点击的表头。接着在Ajax请求中添加一个名为“order”的参数,用于指定排序顺序。最后修改PHP中的查询语句,将ORDER BY子句修改为“ORDER BY $order DESC/ASC”即可实现排序功能。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>无刷新分页</title>
<script src="http://cdn.bootcss.com/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript">
function loadData(page, keyword, order) {
$.ajax({
url: 'data.php',
type: 'get',
dataType: 'json',
data: {
page: page,
keyword: keyword,
order: order
},
success: function (data) {
var html = '';
for (var i = 0; i < data.data.length; i++) {
html += '<tr>';
html += '<td>' + data.data[i].id + '</td>';
html += '<td>' + data.data[i].name + '</td>';
html += '<td>' + data.data[i].age + '</td>';
html += '</tr>';
}
$('table tbody').html(html);
var pageCount = data.pageCount;
var pageHtml = '';
for (var i = 1; i <= pageCount; i++) {
if (i === page) {
pageHtml += '<li class="active"><a href="#">' + i + '</a></li>';
} else {
pageHtml += '<li><a href="#" onclick="loadData(' + i + ', \'' + keyword + '\', \'' + order + '\')">' + i + '</a></li>';
}
}
$('.pagination').html(pageHtml);
}
});
}
$(function () {
loadData(1, '', '');
$('#btnSearch').on('click', function () {
loadData(1, $('#txtKeyword').val(), '');
});
$('table thead th:first-child').on('click', function () {
loadData(1, '', 'id');
});
$('table thead th:nth-child(2)').on('click', function () {
loadData(1, '', 'name');
});
$('table thead th:nth-child(3)').on('click', function () {
loadData(1, '', 'age');
});
});
</script>
</head>
<body>
<table>
<thead>
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<form>
<label for="txtKeyword">关键字:</label>
<input type="text" id="txtKeyword">
<button type="button" id="btnSearch">搜索</button>
</form>
<ul class="pagination">
</ul>
</body>
</html>
到此,我们就完成了在PHP+Ajax的分页功能中添加搜索和排序功能的攻略。
附demo源码下载:https://github.com/very-big-boss/php-ajax-pagination
本文链接:http://task.lmcjl.com/news/18784.html