//AJAX分页详见兄弟连PHP项目视频教程22讲35分钟左右
主要实现是需要将分页中的每个链接都改为AJAX请求 //前端缓存技术:基于javascript传输的数据,只要浏览器没关,都保存在内存中
//实现方法:创建一个数组,将需要缓存的数据保存在数组中,需要使用时调用即可;参加兄弟连PHP项目视频22第45分钟左右
var cache=new Array(); //创建一个用于缓存的数组
function setpage(index,data) {
if (!cache[index]) { //当缓存不存在时,则进行缓存
cache[index]=data;
}else { //缓存存在时,则读取缓存
xxx=cache[index];
}
}

一、控制器中分配显示主页面

public function index(){
$this->assign('time',time());  //页面按需进行查询-分配等就行,不需要对分页数据进行查询
$this->display();
}

注:主页不需要对分页数据进行查询

二、在主页中创建一个DIV容器用于展示分页内容

1、HTML需求

{$time}  //分页以外的数据,这些数据不会受分页的影响
<div id='ajaxpage'>  //分页容器
<div class='page' style='display:none;'><a href="{:U('ajaxPage',array('p'=>1))}" title="">自动点击执行AJAX请求显示第一页内容</a></div>  //需要创建一个链接,用于向AJAX分页自动发送第一页的请求
</div>

注:需要自己创建一个链接,指向分页控制器,并传入p=1;这个链接的作用是用jquery自动点击获取第一页数据;HTML的构造需要和分页的相同,这样jquery的AJAX请求才能正常获取a标签信息;如这里的构造是class=page里的a,与分页链接相同

2、JQuery需求

var cache=new Array(); //--创建一个用于缓存的数组,用于前端JS数据缓存
//这是分页中各个分页的AJAX请求
$(function(){
$('#ajaxpage').on('click','.page a',function () { //使用on()进行动态绑定事件;非动态是$('.page a').click();on()里的第二个参数是AJAX中动态绑定的选择器,而$('#ajaxpage')选取AJAX外的合适的DOM,通常是包 过AJAX内容的那个DOM
var url=$(this).attr('href');   //取得分页a标签链接地址,正好是要提交的控制器和传参:Index/ajaxPage/p/1
if (cache[url]) { //--如果缓存存在,则读取缓存
$('#ajaxpage').html(cache[url]);
}else { //否则进行ajax请求
$.ajax({
type: "GET",
url:url,    //请求URL
success:function(data){
$('#ajaxpage').html(data);     //将分页控制器输出的模版加载到容器中
cache[url]=data; //--将返回的数据存入缓存
//alert(url);  //开启这里可以判断缓存是否生效
}
});
}
return false;     //使a标签失效,防止页面跳转
});
});

注:必须用on进行动态绑定;接收返回的数据直接使用html()加载进模版指定的位置,不用对数据进行HTML格式组合

//需要先使用trigger当页面加载完自动点击一次创建的链接,完成首页数据的AJAX请求
$(function () {
$('.page a').trigger('click');
});
注:需要写在AJAX请求代码的下面;模拟点击的时候,就会请求上面的AJAX了

三、控制器中分页查询

public function ajaxPage(){
$question = M("question");
import('ORG.Util.Page'); //引入分页类
$count = $question->where('question_category = 49 AND status = 0')->count(); //查询出总条数
$page=new Page($count,10); //$count:总条数,10:每页显示条数$page->lastSuffix = false;
//设置分页类,这里设置的是最下面那排分页数据的样式
$Page->rollPage = 3; //页面显示的页数,默认是5
$page->setConfig('header','条记录');  //设置显示的文字,这5项都使用的默认值
$page->setConfig('prev','上一页');
$page->setConfig('next','下一页');
$page->setConfig('first','首页');
$page->setConfig('last','尾页');
$page->setConfig('theme',"<b>共%totalRow%%header% %nowPage%/%totalPage% 页 %first% %prePage% %upPage% %linkPage% %downPage% %nextPage% %end%</b>"); //设置显示的具体内容,可以在这里使用HTML CSS等样式
$limit=$page->firstRow.','.$page->listRows; //调用分页类的属性;确定查询的数据是从第几个开始取,取出多少个
$list = $question->field('question_price,question_id,question_startTime,question_name,question_title,pay')->where('question_category = 49 AND status = 0')->order('question_startTime DESC')->limit($limit)->select();//使用field()方法取出需要的字段,order()方法排 序,limit()方法决定取出的数据
$this->list=$list; //分配给模版,等同于assign()
$this->assign('page',$page->show()); //将分页类分配给模版
$this->display();  //这里直接使用display()而不是ajaxReturn()
}

注:这里就只对分页内容进行查询,并使用display()输出模版,而不是ajaxReturn()返回数据

四、分页内容显示

<foreach name='list' item='v'>
<tr>
<td>{$v['question_price']}</td>
<td>{$v['pay']}</td>
<td>{$v['question_title']}</td>
<td>{$v['question_name']}</td>
<td>{$v['question_startTime']|date='Y-m-d H:i:s',###}</td>
<td><a href="{:U('uptStatus',array('oldSta'=>'0','status'=>'1','id'=& gt;$v['question_id']))}">退回</a>/<a href="{:U('uptStatus',array('oldSta'=>'0','status'=>'2','id'=& gt;$v['question_id']))}">通过</a>/<a href="{:U('uptStatus',array('oldSta'=>'0','status'=>'8','id'=>$v['question_id']))}" onclick='return confirm("你确定删除吗?")'>回收站</a></td>
</tr>
</foreach>
<tr>
<td colspan="6" class='page'>  //这里的class=page和首次点击的结构相同
{$page}
</td>
</tr>

注:这里的HTML只要分页的标签即可,不能有<html><body>这些标签

结 语:这样的好处是将分页内容以模版形式构建,而不需要在AJAX请求的回调函数中构建,JS里写HTML各种蛋疼啊~因为是模拟点击获取的分页内容,所以 在第一次页面加载完成时分页内容的显示会稍有延迟;当然,也可以在首页中就将分页第一页查询出来分配给模版并显示,但这样代码就会重复很多;也可以在后台 将分页查询进行封装,前台使用<include>包含分页模版,这就看个人需求了

ThinkPHP AJAX分页及JS缓存的应用的更多相关文章

  1. thinkphp ajax分页

    临时更改后的page类(很多地方没修改...因为笔者PHP没学好..)如下: 复制代码 <?php namespace Fenye\libs; /** file: page.class.php ...

  2. THINKPHP ajax分页示例

    先把框架的page类改造一下 路径在ThinkPHP/Library/Think/Page.class.php文件 添加一个方法 ajax_show 代码如下 <?php /** * 组装分页链 ...

  3. ajax 分页点击数据缓存

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. thinkphp ajax分页加载更多最简单的实现方法

    <div class="li_list"> <volist name="list" id="vo"> <div ...

  5. ThinkPHP 整合Bootstrap Ajax分页

    ThinkPHP Ajax分页代码 publicfunction index() { $where=array(); $name = I('name'); if(!empty($name)){ $wh ...

  6. MVC - 11(下)jquery.tmpl.js +ajax分页

    继续 mvc-11(上).dto:http://www.cnblogs.com/tangge/p/3840060.html jquery.tmpl.js 下载:http://pan.baidu.com ...

  7. Thinkphp+Ajax带关键词搜索列表无刷新分页实例

    Thinkphp+Ajax带关键词搜索列表无刷新分页实例,两个查询条件,分页和搜索关键字,懂的朋友还可以添加其他分页参数. 搜索#keyword和加载内容区域#ajax_lists <input ...

  8. [js开源组件开发]ajax分页组件

    ajax分页组件 我以平均每一周出一个开源的js组件为目标行动着,虽然每个组件并不是很庞大,它只完成某一个较小部分的工作,但相信,只要有付出,总会得到回报的.这个组件主要完成分页的工作. 这张图里显示 ...

  9. Ajax清除浏览器js、css、图片缓存的方法

    做东东时都是把图片在服务器的地址存放在数据库里面,然后到浏览器中显示,但是后来发现了两个问题. 第一:为了安全起见,js是无法读取本地的图片的,不然你写一个js,岂不是可以获取任何人电脑里面的文件了. ...

随机推荐

  1. c# 获取方法所在的命名空间 类名 方法名

    平时我们在记录日志的时候难免会需要直接记录当前方法的路径,以便查找,但是每次都输入方法名称非常的繁琐,同时如果修改了方法名称也要去手动修改日志内容,真的是劳命伤财啊,所以有了如下方法则可解决我们的大难 ...

  2. [Java学习] Java类的基本运行顺序

    我们以下面的类来说明一个基本的 Java 类的运行顺序: 1. public class Demo{ 2. private String name; 3. private int age; 4. 5. ...

  3. 20170728xlVBA改转置一例

    Sub 导出() Dim Sht As Worksheet, ShtName As String Dim NextRow As Long, NextRow2 As Long Dim iRow As L ...

  4. 12月12日 has_many through:的interference, option

    has_many :products, through: :cart_items, source: :product build定义:collection.build(attributes = {}, ...

  5. H5基础知识(一)

    一.概述 HTML5  是html4.0 升级版 结构 Html5 .样式 css3 .行为: API  都有所增强 HTML5并不仅仅只是做为HTML标记语言的一个最新版本,更重要的是它制定了Web ...

  6. Sergey's problem CodeForces - 1019C (图论,构造,神题)

    链接 大意: 给定有向图, 求选择一个点集$S$, 使得$S$任意两点不相连, 且对于不属于$S$的任意点$x$, 均存在$S$中的点$y$, 使得$d(x,y)<=2$, $d(x,y)$为从 ...

  7. Jamie and Binary Sequence (changed after round) CodeForces - 916B (贪心)

    链接 大意: 求将n划分为k个2的幂的和, 且最大幂最小,字典序尽量大 比较简单的贪心练习题, 但放在div2的B题感觉偏难了..... 先只考虑最大幂最小, 首先注意到直接按n的二进制划分即可得到最 ...

  8. C#下实现的K-Means优化[1]-「离群点检测」

    资源下载 #本文PDF版下载 C#下实现的K-Means优化[1]-「离群点检测」 前言 在上一篇博文中,我和大家分享了「C # 下实现的多维基础K-MEANS聚类」的[C#下实现的基础K-MEANS ...

  9. nothing added to commit but untracked files present.

    当我们使用git的时候 如果我们在工作区修改了某些文件而没有新增文件,可以直接用: $ git commit --all -m "备注信息"                  -- ...

  10. xhost + 的作用

    xhost 是用来控制X server访问权限的. 通常当你从hostA登陆到hostB上运行hostB上的应用程序时, 做为应用程序来说,hostA是client,但是作为图形来说, 是在hostA ...