AJAX(二)---局部刷新实现分页效果的实现
2017-09-16 12:06
561 查看
## 案例分析
无刷新分页,只是局部刷新,整个页面并无刷新,这样不仅可以减少对带宽,服务器的消耗,还可以给用户带来更好的体验。
当无需局部刷新时,使用传统分页即可,便于编写与维护。
先制作传统分页效果,在这里我们借助一个封装好的简单的分页类进行制作,这个分页类的样式使用的是bootstrap的样式,只需要设置几个属性即可。
下面是分页类的源码
接下来通过调用分页类,设置总记录数,地址,每页条数来制作分页,源码如下,bootstrap就不附加了,我使用的版本为3.2.0
那么我们如何实现ajax无刷新分页呢?
我们先制作ajax请求,并在想实现无刷新分页的部分进行获取,输出从PHP文件获得的响应。
把ajax封装到showpage函数中,并通过参数将请求的地址(包括page)传递进去,从而实现ajax无刷新分页。
下面是源码
对分页类中页码地址的部分做出修改如下
发送请求获得响应的页面,数据同样是page.php页面的不再附加
以上就是实现AJAX无刷新分页的全部源码。
下面就是最终的效果图,每一个页码都调用showpage函数,并传递相应的urL
一、无刷新分页
代码较多,当有必要时再进行使用,避免维护困难无刷新分页,只是局部刷新,整个页面并无刷新,这样不仅可以减少对带宽,服务器的消耗,还可以给用户带来更好的体验。
当无需局部刷新时,使用传统分页即可,便于编写与维护。
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
<?php require_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,保持一致,这样就可以实时获得请求数据,而仅仅局部刷新。相关文章推荐
- 用AjaxPro实现无刷新翻页效果及数据库分页技术介绍
- php jQuery . Ajax 实现局部刷新分页
- 用AjaxPro实现无刷新翻页效果及数据库分页技术介绍
- 基于Json的Ajax无刷新分页效果实现(一)
- 使用三层实现分页利用ajax实现无刷新的效果
- thinkphp ajax 无刷新分页效果的实现
- Ajax中,ModalPopup与UpdatePanel结合,实现局部刷新的登录效果 (调用cs服务)
- 用AjaxPro实现无刷新翻页效果及数据库分页技术介绍
- Ajax中,ModalPopup与UpdatePanel结合,实现局部刷新的登录效果 (调用cs服务)
- 用AjaxPro实现无刷新翻页效果及数据库分页技术介绍
- 用AjaxPro实现无刷新翻页效果及数据库分页技术介绍
- 基于Json的Ajax无刷新分页效果实现(二)
- 用AjaxPro实现无刷新翻页效果及数据库分页技术介绍
- easyui的datagrid整合struts2,以及Ajax,实现局部刷新功能,并设置分页的实现---------投票案例
- jQuery框架+DWR框架实现的Java Web中的Ajax效果(异步请求,局部刷新)
- 简单实现Ajax无刷新分页效果
- 基于Json的Ajax无刷新分页效果实现(一)
- 用AjaxPro实现无刷新翻页效果及数据库分页技术介绍
- AjaxAnyWhere 实现页面局部刷新,局部分页
- 基于Json的Ajax无刷新分页效果实现(二)