在Thinkphp中使用ajax实现无刷新分页的方法


Posted in PHP onOctober 25, 2016

在Thinkphp目录的Lib\ORG\Util\目录里新建AjaxPage.class.php,写入一下内容:

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2009 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
// $Id: Page.class.php 2712 2012-02-06 10:12:49Z liu21st $
class AjaxPage {
// 分页栏每页显示的页数
public $rollPage = 5;
// 页数跳转时要带的参数
public $parameter ;
// 默认列表每页显示行数
public $listRows = 20;
// 起始行数
public $firstRow ;
// 分页总页面数
protected $totalPages ;
// 总行数
protected $totalRows ;
// 当前页数
protected $nowPage ;
// 分页的栏的总页数
protected $coolPages ;
// 分页显示定制
protected $config = array('header'=>'条记录','prev'=>'上一页','next'=>'下一页','first'=>'第一页','last'=>'最后一页','theme'=>' %totalRow% %header% %nowPage%/%totalPage% 页 %upPage% %downPage% %first% %prePage% %linkPage% %nextPage% %end%');
// 默认分页变量名
protected $varPage;
public function __construct($totalRows,$listRows='',$ajax_func,$parameter='') {
$this->totalRows = $totalRows;
$this->ajax_func = $ajax_func;
$this->parameter = $parameter;
$this->varPage = C('VAR_PAGE') ? C('VAR_PAGE') : 'p' ;
if(!empty($listRows)) {
$this->listRows = intval($listRows);
}
$this->totalPages = ceil($this->totalRows/$this->listRows); //总页数
$this->coolPages = ceil($this->totalPages/$this->rollPage);
$this->nowPage = !empty($_GET[$this->varPage])?intval($_GET[$this->varPage]):1;
if(!empty($this->totalPages) && $this->nowPage>$this->totalPages) {
$this->nowPage = $this->totalPages;
}
$this->firstRow = $this->listRows*($this->nowPage-1);
}
public function setConfig($name,$value) {
if(isset($this->config[$name])) {
$this->config[$name] = $value;
}
}
public function show() {
if(0 == $this->totalRows) return '';
$p = $this->varPage;
$nowCoolPage = ceil($this->nowPage/$this->rollPage);
$url = $_SERVER['REQUEST_URI'].(strpos($_SERVER['REQUEST_URI'],'?')?'':"?").$this->parameter;
$parse = parse_url($url);
if(isset($parse['query'])) {
parse_str($parse['query'],$params);
unset($params[$p]);
$url = $parse['path'].'?'.http_build_query($params);
}
//上下翻页字符串
$upRow = $this->nowPage-1;
$downRow = $this->nowPage+1;
if ($upRow>0){
$upPage="<a id='big' href='javascript:".$this->ajax_func."(".$upRow.")'>".$this->config['prev']."</a>";
}else{
$upPage="";
}
if ($downRow <= $this->totalPages){
$downPage="<a id='big' href='javascript:".$this->ajax_func."(".$downRow.")'>".$this->config['next']."</a>";
}else{
$downPage="";
}
// << < > >>
if($nowCoolPage == 1){
$theFirst = "";
$prePage = "";
}else{
$preRow = $this->nowPage-$this->rollPage;
$prePage = "<a id='big' href='javascript:".$this->ajax_func."(".$preRow.")'>上".$this->rollPage."页</a>";
$theFirst = "<a id='big' href='javascript:".$this->ajax_func."(1)' >".$this->config['first']."</a>";
}
if($nowCoolPage == $this->coolPages){
$nextPage = "";
$theEnd="";
}else{
$nextRow = $this->nowPage+$this->rollPage;
$theEndRow = $this->totalPages;
$nextPage = "<a id='big' href='javascript:".$this->ajax_func."(".$nextRow.")' >下".$this->rollPage."页</a>";
$theEnd = "<a id='big' href='javascript:".$this->ajax_func."(".$theEndRow.")' >".$this->config['last']."</a>";
}
// 1 2 3 4 5
$linkPage = "";
for($i=1;$i<=$this->rollPage;$i++){
$page=($nowCoolPage-1)*$this->rollPage+$i;
if($page!=$this->nowPage){
if($page<=$this->totalPages){
$linkPage .= " <a id='big' href='javascript:".$this->ajax_func."(".$page.")'> ".$page." </a>";
}else{
break;
}
}else{
if($this->totalPages != 1){
$linkPage .= " <span class='current'>".$page."</span>";
}
}
}
$pageStr = str_replace(
array('%header%','%nowPage%','%totalRow%','%totalPage%','%upPage%','%downPage%','%first%','%prePage%','%linkPage%','%nextPage%','%end%'),
array($this->config['header'],$this->nowPage,$this->totalRows,$this->totalPages,$upPage,$downPage,$theFirst,$prePage,$linkPage,$nextPage,$theEnd),$this->config['theme']);
return $pageStr;
}
}
?>

控制器里写入以下内容:

<?php
class UserAction extends Action{
public function user(){
import("ORG.Util.AjaxPage");// 导入分页类 注意导入的是自己写的AjaxPage类
$credit = M('user');
$count = $credit->count(); //计算记录数
$limitRows = 5; // 设置每页记录数
$p = new AjaxPage($count, $limitRows,"user"); //第三个参数是你需要调用换页的ajax函数名
$limit_value = $p->firstRow . "," . $p->listRows;
$data = $credit->order('id desc')->limit($limit_value)->select(); // 查询数据
$page = $p->show(); // 产生分页信息,AJAX的连接在此处生成
$this->assign('list',$data);
$this->assign('page',$page);
$this->display();
}
}
?>

模板文件如下:

<html>
<head>
<title>Ajax无刷新分页</title>
<script type="text/javascript" src="../Public/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
function user(id){ //user函数名 一定要和action中的第三个参数一致上面有
var id = id;
$.get('User/user', {'p':id}, function(data){ //用get方法发送信息到UserAction中的user方法
$("#user").replaceWith("<div id='user'>"+data+"</div>"); //user一定要和tpl中的一致
});
}
</script>
</head>
<body>
<div id='user'> <!--这里的user和下面js中的test要一致-->
<volist id='list' name='list'> <!--内容输出-->
<{$list.id}>  <{$list.username}><br/>
</volist>
<{$page}> <!--分页输出-->
</div>
</body>
</html>

以上所述是小编给大家介绍的在Thinkphp中使用ajax实现无刷新分页的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
用php获取远程图片并把它保存到本地的代码
Apr 07 PHP
如何使用PHP批量去除文件UTF8 BOM信息
Aug 05 PHP
如何在php中正确的使用json
Aug 06 PHP
使用php记录用户通过搜索引擎进网站的关键词
Feb 13 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
Aug 11 PHP
WIN8.1下搭建PHP5.6环境
Apr 29 PHP
PHP实现简单搜歌的方法
Jul 28 PHP
PHP创建/删除/复制文件夹、文件
May 03 PHP
什么是PHP7中的孤儿进程与僵尸进程
Apr 14 PHP
php使用socket调用http和smtp协议实例小结
Jul 26 PHP
关于php开启错误提示的总结
Sep 24 PHP
php ActiveMQ的安装与使用方法图文教程
Feb 23 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
Oct 25 #PHP
详解PHP中foreach的用法和实例
Oct 25 #PHP
php array_keys 返回数组的键名
Oct 25 #PHP
php array_key_exists() 与 isset() 的区别
Oct 24 #PHP
PHP实现简易blog的制作
Oct 24 #PHP
php基于websocket搭建简易聊天室实践
Oct 24 #PHP
详解php中 === 的使用
Oct 24 #PHP
You might like
一个显示天气预报的程序
2006/10/09 PHP
xml在joomla表单中的应用详解分享
2012/07/19 PHP
浅析php中抽象类和接口的概念以及区别
2013/06/27 PHP
PHP文件缓存内容保存格式实例分析
2014/08/20 PHP
php上传文件并显示上传进度的方法
2015/03/24 PHP
PHP-FPM之Chroot执行环境详解
2015/08/03 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
基于jQuery的输入框无值自动显示指定数据的实现代码
2011/01/24 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
Javascript动态创建表格及删除行列的方法
2015/05/15 Javascript
JavaScript中使用Async实现异步控制
2017/08/15 Javascript
JS实现点击链接切换显示隐藏内容的方法
2017/10/19 Javascript
vuex与组件联合使用的方法
2018/05/10 Javascript
nodejs 使用http进行post或get请求的实例(携带cookie)
2019/01/03 NodeJs
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
2019/03/29 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
Python记录详细调用堆栈日志的方法
2015/05/05 Python
Python selenium根据class定位页面元素的方法
2019/02/26 Python
Django如何将URL映射到视图
2019/07/29 Python
python 公共方法汇总解析
2019/09/16 Python
Python爬取腾讯视频评论的思路详解
2019/12/19 Python
Python面向对象封装操作案例详解 II
2020/01/02 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
Python logging模块进行封装实现原理解析
2020/08/07 Python
python调用摄像头的示例代码
2020/09/28 Python
Python Django路径配置实现过程解析
2020/11/05 Python
python实现计算图形面积
2021/02/22 Python
基于CSS3实现的黑色个性导航菜单效果
2015/09/14 HTML / CSS
css3编写浏览器背景渐变背景色的方法
2018/03/05 HTML / CSS
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
小区门卫值班制度
2014/01/24 职场文书
房屋买卖协议书
2014/04/10 职场文书
电话营销开场白
2015/05/29 职场文书
Python基本的内置数据类型及使用方法
2022/04/13 Python