在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 28 PHP
Mysql中分页查询的两个解决方法比较
May 02 PHP
如何用php获取程序执行的时间
Jun 09 PHP
php把session写入数据库示例
Feb 26 PHP
PHP实现显示照片exif信息的方法
Jul 11 PHP
php实现递归与无限分类的方法
Feb 16 PHP
PHP获取毫秒级时间戳的方法
Apr 15 PHP
PHP实现查询两个数组中不同元素的方法
Feb 23 PHP
PHP实现的DES加密解密实例代码
Apr 06 PHP
php分页查询的简单实现代码
Mar 14 PHP
php实现留言板功能(代码详解)
Mar 28 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
May 02 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
浅析PHP原理之变量分离/引用(Variables Separation)
2013/08/09 PHP
php使用socket post数据到其它web服务器的方法
2015/06/02 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
PHP实现重载的常用方法实例详解
2017/10/18 PHP
php实现快速对二维数组某一列进行组装的方法小结
2019/12/04 PHP
jquery中常用的SET和GET
2009/01/13 Javascript
JS 动态加载脚本的4种方法
2009/05/05 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
2013/12/27 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
JavaScript自动点击链接 防止绕过浏览器访问的方法
2017/01/19 Javascript
JS中的多态实例详解
2017/10/15 Javascript
浅谈React碰到v-if
2018/11/04 Javascript
浅谈Vue 性能优化之深挖数组
2018/12/11 Javascript
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
微信小程序聊天功能的示例代码
2020/01/13 Javascript
如何在面试中手写出javascript节流和防抖函数
2020/10/22 Javascript
JavaScript实现下拉列表
2021/01/20 Javascript
Python生成随机MAC地址
2015/03/10 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
python中列表和元组的区别
2017/12/18 Python
python实现简易内存监控
2018/06/21 Python
Python OpenCV读取显示视频的方法示例
2020/02/20 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
利用PyTorch实现VGG16教程
2020/06/24 Python
HTML5 通信API 跨域门槛将不再高、数据推送也不再是梦
2013/04/25 HTML / CSS
领导党性分析材料
2014/02/15 职场文书
领导干部廉政承诺书
2014/03/27 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python
nginx作grpc的反向代理踩坑总结
2021/07/07 Servers
MySQL中order by的使用详情
2021/11/17 MySQL
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android