PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】


Posted in PHP onJuly 03, 2017

本文实例讲述了PHP+Ajax实现的无刷新分页功能。分享给大家供大家参考,具体如下:

注:本文中使用到的一些类库在前面文章都能找到源代码,我会在文中指明链接所在,为了缩短文章篇幅,由此带来的阅读不便,敬请谅解。

本文讲解 Ajax 实现无刷新分页、实现原理、代码展示、代码下载。

这里需要说明一些知识:

1、Ajax 无刷新页面的好处:提供良好的客户体验,通过 Ajax 在后台从数据库中取得数据并展示,取缔了等待加载页面而出现的空白状态;

2、那么,Ajax 无刷新页面是运行在动态页面(.php)?还是静态页面(.html/.htm/.shtml)?答案是:静态页面;

3、实现原理:通过前端 JS 脚本程序与 Ajax 相结合取得从动态页面返回的数据,并显示。

好了,下面进行代码讲解:

既然,是运行在静态页面上,我们首先先创建一个静态 HTML 页面,index.html 的代码清单如下。

index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="js/ajax.js"></script> <!-- 载入 Ajax 类库 -->
<title>Ajax 实现无刷新页面</title>
<style type="text/css">
 body {
  font-size:12px;
 }
</style>
</head>
<body>
 <div id="fpage">数据加载中...</div>
</body>
</html>

代码清单中,我们加载了一个 Ajax 类库,这个类库可以在 https://3water.com/article/82066.htm 文章中找到(并附有使用方法)

在这个静态页面中,只会显示一个“数据加载中....”,并没有任何数据。这时,我们就需要一个 JS 脚本来实现通过 Ajax 从数据库中获取数据。JS 脚本如下:

<script type="text/javascript">
 /**
 * setPage(url) 根据 url 从 article.php 中获取数据
 * @param int pageNum 页码
 * @return string
 */
 var cache=new Array(); // 缓存变量,当数据被访问过之后放置在缓存中,加快访问速度
 function setPage(pageNum) {
  var fpage = document.getElementById('fpage'); // 获取 fpage 对象
  // 如果缓存中存在数据,那么直接从缓存中读取;如果不存在数据,那么就从数据库中读取,并把数据存入缓存
  if (typeof(cache[pageNum])=='undefined') {
   var ajax = Ajax();
   ajax.get('article.php?page='+pageNum, function(data){
    fpage.innerHTML = data; // fpage对象的内容是从 article.php 中取来的
    cache[pageNum] = data;
   })
  } else {
   fpage.innerHTML = cache[pageNum];
  }
 }
 setPage(1); // 默认执行
</script>

仔细阅读上面的代码,您会发现下面现象:

1、setPage(pageNum) 是一个从数据库中提取数据的 JS 函数接口;
2、Ajax 是通过 article.php 文件来获取数据;
3、article.php?page=xx,这里的 xx 就是所要取得的页码数据,
setPage(1):就是取得第1页数据;
setPage(2):就是取得第2页数据;
setPage(100):就是取得第100页数据;
……
那么,如何从 article.php 文件中取得数据呢?请看下面代码清单。

article.php

<?php
/**
* $Id: article.php
* author Lee.
* Last modify $Date: 2012-01-21 16:53:05 $
*/
require_once './config.inc.php';
$m = new Model();
$page = new ajaxPage($m->total('article'),20); // $m->total('article') 获取 article 表的记录数;10为每页显示十条
$result = $m->fetchAll('article', '*', '', '', $page->limit); // 取出数据,^_^,很方便吧
echo '<table align="center" border="1" width="1100" style="border-collapse:collapse;font-size:14px;" bordercolor="#666">';
echo '<caption><h1>华强电子网资讯</h1></caption>';
echo '<tr height="25"><th>ID</th><th>Title</th><th>Author</th><th>Source</th><th>Date</th></tr>';
foreach ($result as $v) {
 echo "<tr height='21'><td align='center'>{$v['id']}</td><td>{$v['title']}</td><td align='center'>{$v['author']}</td><td align='center'>{$v['source']}</td><td align='center'>{$v['date']}</td></tr>";
}
echo '<tr><td align="right" colspan="5">'.$page->fpage().'</td></tr>';
echo '</table>';
?>

article.php 中连接的数据是前面文章从华强电子网抓来的资讯数据,因为数据比较大,代码打包下载中会附加 article.sql 文件,以便大家测试。

静态页面 index.html 上显示的数据就是 article.php 文件中 echo 的代码。

代码文件中的 config.inc.php 文件主要就是定义一些常量,比如:数据库用户名、数据库密码、主机……,数据库连接类库(Db.class.php)和数据库操作类库(Model.class.php),请参考文章https://3water.com/article/82063.htm,附有使用方法。

程序效果图:

下图标注的是注意关注的地方。

PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】

这样,Ajax 无刷新分页就完成了。程序中还有一个 ajaxPage.class.php 没有说明,其实,这个 ajaxPage 类库的使用方法和一般的分页类库是一样的。

即:

$page = new ajaxPage(记录总数, 每页显示数);

具体细节请大家下载代码阅读即可。

完整代码点击此处本站下载

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php格式化工具Beautify PHP小小BUG
Apr 24 PHP
PHP 程序授权验证开发思路
Jul 09 PHP
Zend Studio (eclipse)使用速度优化方法
Mar 23 PHP
php dirname(__FILE__) 获取当前文件的绝对路径
Jun 28 PHP
PHP版微信公众平台红包API
Apr 02 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
Mar 18 PHP
XHProf报告字段含义的解析
May 17 PHP
php+MySql实现登录系统与输出浏览者信息功能
Jul 01 PHP
使用正则去除php代码中的注释方法
Nov 03 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
May 11 PHP
PHP异常类及异常处理操作实例详解
Dec 19 PHP
如何通过PHP实现Des加密算法代码实例
May 09 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
Jul 03 #PHP
php获取文章内容第一张图片的方法示例
Jul 03 #PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
Jul 03 #PHP
PHP不使用内置函数实现字符串转整型的方法示例
Jul 03 #PHP
利用PHP判断是否是连乘数字串的方法示例
Jul 03 #PHP
使用Zttp简化Guzzle 调用
Jul 02 #PHP
详解php几行代码实现CSV格式文件输出
Jul 01 #PHP
You might like
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
Laravel 集成 Geetest验证码的方法
2018/05/14 PHP
PHP 实现 JSON 数据的编码和解码操作详解
2020/04/22 PHP
Prototype Hash对象 学习
2009/07/19 Javascript
jQuery EasyUI API 中文文档 - ComboTree组合树
2011/10/11 Javascript
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
2013/04/02 Javascript
js跨浏览器实现将字符串转化为xml对象的方法
2013/09/25 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
2014/05/22 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
2016/01/27 Javascript
js跨域资源共享 基础篇
2016/07/02 Javascript
微信小程序 二维码canvas绘制实例详解
2017/01/06 Javascript
jQuery初级教程之网站品牌列表效果
2017/08/02 jQuery
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
ajax jquery实现页面某一个div的刷新效果
2021/03/04 jQuery
python操作ie登陆土豆网的方法
2015/05/09 Python
Python实现生成随机日期字符串的方法示例
2017/12/25 Python
python中virtualenvwrapper安装与使用
2018/05/20 Python
Django ORM 聚合查询和分组查询实现详解
2019/08/09 Python
Python简易版图书管理系统
2019/08/12 Python
python global关键字的用法详解
2019/09/05 Python
python异常处理try except过程解析
2020/02/03 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
python sitk.show()与imageJ结合使用常见的问题
2020/04/20 Python
使用python-cv2实现视频的分解与合成的示例代码
2020/10/26 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
2021/02/03 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
canvas烟花特效锦集
2018/01/17 HTML / CSS
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
一些Unix笔试题和面试题
2012/09/25 面试题
售后客服工作职责
2014/06/16 职场文书
商务经理岗位职责
2014/07/30 职场文书
2014年自愿离婚协议书范本
2014/09/25 职场文书
2014年测量员工作总结
2014/12/12 职场文书
财务部岗位职责范本
2015/04/14 职场文书
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python