AJAX(二)---局部刷新实现分页效果的实现
来源:互联网 发布:ask软件 编辑:程序博客网 时间:2024/05/16 08:47
## 案例分析
一、无刷新分页
- 代码较多,当有必要时再进行使用,避免维护困难
- 无刷新分页,只是局部刷新,整个页面并无刷新,这样不仅可以减少对带宽,服务器的消耗,还可以给用户带来更好的体验。
- 当无需局部刷新时,使用传统分页即可,便于编写与维护。
1.1 实现步骤
- ajax对传统分页效果的封装.
- 先制作传统分页效果,在这里我们借助一个封装好的简单的分页类进行制作,这个分页类的样式使用的是bootstrap的样式,只需要设置几个属性即可。
- 下面是分页类的源码
<?php/** * 分页类 */class Page{ //总的记录数 private $total_rows = 100; //每页显示的数量, 默认每页显示3条数据 private $pagesize = 3; //默认当前页为1 private $now_page = 1; //点击超链接时,跳转的页面 private $url = ''; //分页类的属性设为私有,当为不可访问的属性赋值时,自动调用__set public function __set($name, $value) { if(property_exists($this,$name)){ $this -> $name = $value; } } //当访问不可访问的属性时,自动调用__et public function __get($name) { if(property_exists($this,$name)){ return $this -> $name; } } //该核心方法给我们返回一个具有class="pagination"的ul,bootstrap样式 public function create() { //在地址后加上page参数 $url = $this -> url ."&page="; $first = 1; if($this -> keyword != ''){ $url = $this -> url ."?keyword={$this -> keyword}&page="; } $first_active = $this->now_page == 1 ? 'active' :''; //创建首页的标签 $page_html = <<<HTML <ul class="pagination"> <li class="$first_active"><a href="{$url}{$first}">首页</a></li>HTML; //创建中间的页码数,该创建多少取决于总共有多少页 $count = ceil($this -> total_rows / $this ->pagesize); //从当前页-3开始,到当前页+3结束 for($i=$this->now_page-3;$i<=$this->now_page+3;$i++){ $active = $this -> now_page == $i ? 'active' : ''; if($i < 2 || $i > $count-1){ continue; } $page_html .= <<<HTML <li class="$active"><a href="{$url}{$i}">$i</a></li>HTML; } //创建尾页的标签 $last_active = $this -> now_page == $count ? 'active' :''; $page_html .= <<<HTML <li class="$last_active"><a href="{$url}{$count}">尾页</a></li> </ul>HTML; //返回拼接好的ul return $page_html; }}
- 接下来通过调用分页类,设置总记录数,地址,每页条数来制作分页,源码如下,bootstrap就不附加了,我使用的版本为3.2.0
<?phprequire_once './Page.class.php';//这里连接数据库$Mysqli = mysqli_connect('localhost','root','wasd','test');//设置字符集$Mysqli->query('SET NAMES utf8');//当前页$page_num = isset($_GET['page'])?$_GET['page']:1;//实例化page类$page_ob = new Page();//获取总记录数,并设置$r_sql = 'SELECT count(*) num FROM emp;';$res = $Mysqli->query($r_sql);$rows = $res->fetch_assoc();$page_ob->total_rows = $rows['num'];//url$page_ob->url = 'page.php';//当前页码$page_ob->now_page= $page_num;//为了效果设置,每页5条$page_ob->pagesize=5;//接收页码ul$page_ul = $page_ob->create();//数据$offset = ($page_num-1)*3;$sql = "SELECT empno,ename FROM emp LIMIT $offset,$page_ob->pagesize";$result = $Mysqli->query($sql);$arr = [];while ($row = $result->fetch_assoc()) { $arr[] = $row;}$str= <<<HTML<link style="text/css" rel="stylesheet" href="bootstrap.css"/><table border="1" cellspacing="0" cellpadding="0"> <tr> <th>员工编号</th> <th>员工姓名</th> </tr>HTML;echo $str;foreach ($arr as $v){ echo'<tr>'; echo"<td>".$v['empno']."</td>"; echo"<td>".$v['ename']."</td>"; echo'</tr>';}echo'</table>';echo $page_ul;
- 那么我们如何实现ajax无刷新分页呢?
- 我们先制作ajax请求,并在想实现无刷新分页的部分进行获取,输出从PHP文件获得的响应。
- 把ajax封装到showpage函数中,并通过参数将请求的地址(包括page)传递进去,从而实现ajax无刷新分页。
- 下面是源码
- 对分页类中页码地址的部分做出修改如下
//该核心方法给我们返回一个具有class="pagination"的ul public function create() { $url = $this -> url ."?page="; $first = 1; $first_active = $this->now_page == 1 ? 'active' :''; //创建首页的标签 $page_html = <<<HTML <ul class="pagination"> <li class="$first_active"><a href="javascript:showpage('{$url}{$first}')">首页</a></li>HTML; //创建中间的页码数,该创建多少取决于总共有多少页 $count = ceil($this -> total_rows / $this ->pagesize); //从当前页-3开始,到当前页+3结束 for($i=$this->now_page-3;$i<=$this->now_page+3;$i++){ $active = $this -> now_page == $i ? 'active' : ''; if($i < 2 || $i > $count-1){ continue; } $page_html .= <<<HTML <li class="$active"><a href="javascript:showpage('{$url}{$i}')">$i</a></li>HTML; } //创建尾页的标签 $last_active = $this -> now_page == $count ? 'active' :''; $page_html .= <<<HTML <li class="$last_active"><a href="javascript:showpage('{$url}{$count}')">尾页</a></li> </ul>HTML; //返回拼接好的ul return $page_html; }
- 发送请求获得响应的页面,数据同样是page.php页面的不再附加
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <script> function showpage(url) { //ajax无刷新 //1.ajax创建对象 var xhr = new XMLHttpRequest(); //2.监听状态 xhr.onreadystatechange=function() { if(xhr.readyState==4) { //获取结果的对象,输出返回数据 document.getElementById('result').innerHTML = xhr.responseText; } }; //发送get请求 xhr.open('get',url); xhr.send(null); } window.onload = function() { //传递页码信息,通过page.php的返回页码,实现AJAX无刷新分页 showpage('./page.php?page=1'); } </script></head><body><h2>ajax无刷新分页</h2> <div id="result"> </div></body></html>
以上就是实现AJAX无刷新分页的全部源码。
- 下面就是最终的效果图,每一个页码都调用showpage函数,并传递相应的urL
总结在这里:
AJAX实现无刷新分页的关键在于将每一页的url获得,并更新请求的url,保持一致,这样就可以实时获得请求数据,而仅仅局部刷新。
阅读全文
1 0
- AJAX(二)---局部刷新实现分页效果的实现
- struts-ajax实现局部刷新分页
- jquery+Struts2实现ajax局部刷新分页
- 局部刷新实现的分页
- 基于Json的Ajax无刷新分页效果实现(二)
- Ajax实现无刷新分页效果
- Ajax+PHP实现无刷新分页效果
- $.ajax 实现局部刷新
- Ajax实现局部刷新
- Ajax实现局部刷新
- Ajax实现局部刷新
- Ajax实现局部刷新
- AJAX实现局部刷新
- AJAX实现局部刷新
- AJAx实现局部刷新
- 利用ajax实现页面的局部刷新
- JQuery的Ajax请求实现局部刷新
- 简单的ajax实现局部刷新
- 深入浅出python闭包
- CSS3样式和新特性
- netty源码分析(三)Netty服务端ServerBootstrap的初始化与反射在其中的应用分析
- 医院影像检查流程的完整叙述
- 词向量源码解析:(5.7)ngram2vec源码解析之counts2shuf等
- AJAX(二)---局部刷新实现分页效果的实现
- Java 堆、栈和方法区
- Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
- return与finally的执行顺序与返回值问题
- C语言下调试信息打印与错误位置定位功能的实现
- Java 泛型演示
- Android Gradle 常用使用场景实现方式的总结
- 两台服务器间使用rsync和inotify-tools实现文件同步
- 洛谷 P1445 没占到1444的愤怒