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代码 用PHP写出自己的BLOG系统
Apr 12 PHP
php 随机记录mysql rand()造成CPU 100%的解决办法
May 18 PHP
php设计模式  Command(命令模式)
Jun 17 PHP
PHP命名空间(Namespace)的使用详解
May 04 PHP
php实现加减法验证码代码
Feb 14 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
Jul 22 PHP
PHP实现的多彩标签效果代码分享
Aug 21 PHP
zend framework重定向方法小结
May 28 PHP
yii框架无限极分类的实现方法
Apr 08 PHP
PHP基于GD库实现的生成图片缩略图函数示例
Jul 05 PHP
thinkPHP通用控制器实现方法示例
Nov 23 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
Feb 27 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
PHP合并数组+号和array_merge的区别
2015/06/25 PHP
比较简单的一个符合web标准的JS调用flash方法
2007/11/29 Javascript
实现连缀调用的map方法(prototype)
2009/08/05 Javascript
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
2013/11/18 Javascript
BootStrap入门教程(一)之可视化布局
2016/09/19 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
详解Vue路由History mode模式中页面无法渲染的原因及解决
2017/09/28 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
详解vue-router传参的两种方式
2018/09/10 Javascript
微信小程序 腾讯地图显示偏差问题解决
2019/07/27 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
[02:11]完美世界DOTA2联赛10月28日赛事精彩集锦:来吧展示实力强劲
2020/10/29 DOTA
python单线程文件传输的实例(C/S)
2019/02/13 Python
Django中的静态文件管理过程解析
2019/08/01 Python
python3 mmh3安装及使用方法
2019/10/09 Python
Python中实现输入超时及如何通过变量获取变量名
2020/01/18 Python
Python range与enumerate函数区别解析
2020/02/28 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
2020/03/06 Python
python软件都是免费的吗
2020/06/18 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
2020/11/17 Python
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
Napapijri西班牙在线商店:夹克、外套、运动衫等
2020/11/05 全球购物
国贸专业个人求职信范文
2014/01/08 职场文书
乌鸦喝水教学反思
2014/02/07 职场文书
黄继光的英雄事迹材料
2014/02/13 职场文书
火锅店营销方案
2014/02/26 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
优秀教师申报材料
2014/12/16 职场文书
优秀班主任先进事迹材料
2014/12/16 职场文书
干部培训简讯
2015/07/20 职场文书
化工生产实习心得体会
2016/01/22 职场文书
HTML常用标签超详细整理
2022/03/19 HTML / CSS
移除Selenium中window.navigator.webdriver值
2022/06/10 Python
Python first-order-model实现让照片动起来
2022/06/25 Python