PHP+Ajax实现无刷新分页实例详解(附demo源码下载)


Posted in PHP onApril 07, 2016

本文实例讲述了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 类库,这个类库可以在 前面一篇《一个简单Ajax类库及使用方法实例分析》中找到

在这个静态页面中,只会显示一个“数据加载中....”,并没有任何数据。这时,我们就需要一个 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),请参考文章 《PHP的PDO常用类库实例分析》,附有使用方法。

程序效果图:

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

PHP+Ajax实现无刷新分页实例详解(附demo源码下载)

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

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

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

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

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

PHP 相关文章推荐
PHP&amp;MYSQL服务器配置说明
Oct 09 PHP
php时间不正确的解决方法
Apr 09 PHP
php GD绘制24小时柱状图
Jun 28 PHP
PHP学习笔记 (1) 环境配置与代码调试
Jun 19 PHP
PHP CURL获取cookies模拟登录的方法
Nov 04 PHP
PHP函数getenv简介和使用实例
May 12 PHP
php查询whois信息的方法
Jun 08 PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
Mar 23 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
Jul 01 PHP
PHP实现二维数组按某列进行排序的方法
Nov 18 PHP
微信推送功能实现方式图文详解
Jul 12 PHP
解决laravel 表单提交-POST 异常的问题
Oct 15 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
Apr 07 #PHP
PHP的PDO常用类库实例分析
Apr 07 #PHP
PHP安全下载文件的方法
Apr 07 #PHP
php生成验证码,缩略图及水印图的类分享
Apr 07 #PHP
PHP使用token防止表单重复提交的方法
Apr 07 #PHP
PHP使用Mysqli类库实现完美分页效果的方法
Apr 07 #PHP
Linux下编译redis和phpredis的方法
Apr 07 #PHP
You might like
PHP生成唯一的促销/优惠/折扣码(附源码)
2012/12/28 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
深入浅出php socket编程
2015/05/13 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
Js sort排序使用方法
2011/10/17 Javascript
IE中的File域无法清空使用jQuery重设File域
2014/04/24 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
JavaScript实现动态删除列表框值的方法
2015/08/12 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
浅谈js继承的实现及公有、私有、静态方法的书写
2016/10/28 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
2016/11/15 Javascript
js 调用百度分享功能
2017/02/27 Javascript
jQuery Pagination分页插件使用方法详解
2017/02/28 Javascript
js实现倒计时效果(小于10补零)
2017/03/08 Javascript
vue.js实现备忘录功能的方法
2017/07/10 Javascript
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
JS异步错误捕获的一些事小结
2019/04/26 Javascript
vue cli 3.0 搭建项目的图文教程
2019/05/17 Javascript
js实现文章目录索引导航(table of content)
2020/05/10 Javascript
详解Python程序与服务器连接的WSGI接口
2015/04/29 Python
全面分析Python的优点和缺点
2018/02/07 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
2019 Python最新面试题及答案16道题
2019/04/11 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
pytorch中nn.Conv1d的用法详解
2019/12/31 Python
TensorFlow的reshape操作 tf.reshape的实现
2020/04/19 Python
如何利用python读取micaps文件详解
2020/10/18 Python
简单介绍CSS3中Media Query的使用
2015/07/07 HTML / CSS
让IE9以下版本的浏览器兼容HTML5的方法
2014/03/12 HTML / CSS
Myprotein俄罗斯官网:欧洲第一运动营养品牌
2019/05/05 全球购物
美国儿童服装、家具和玩具精品店:Maisonette
2019/11/24 全球购物
2015年元宵节活动总结
2015/02/06 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书