黄聪:pjax使用心得总结
初次结识pjax是在使用tower时钟发现的。当时使用时发现网站可以局部刷新,当然我们知道使用ajax也是可以实现局部刷新的。
然而我们知道,使用ajax进行局部刷新时网站的title是不会变化的,并且使用浏览器的后退按钮也不能使网站返回上个状态,这时候我们就需要使用pjax了。
关于pjax,推荐先阅读几个文章
http://my.oschina.net/sub/blog/123447?fromerr=s5Bgun3z
https://github.com/defunkt/jquery-pjax 为pjax的github项目地址
在github的项目地址里有关于pjax的详细说明和使用方法,这里不再赘述,本文主要是使用中的一些代码记录和使用心得,方便以后查阅快速上手使用。
看下下述小段代码:
- <div class="body">
- <?php $action_name = $Think.ACTION_NAME; ?>
- <!-- 头部哟 -->
- <?php if ($action_name == 'news'): ?>
- <include file="Brand:header_news" />
- <?php elseif ($action_name == 'forum'): ?>
- <include file="Brand:header_forum" />
- <?php endif; ?>
- <!-- 资讯的二级分类 -->
- <div class="cb"></div>
- <div class="brand-news-nav pjax">
- <ul class="clearfix">
- <li <?php if($_GET['cat'] == '') echo 'class="selected"'; ?>><a class="first" href="{:U("Brand/$action_name")}">全部</a></li>
- <volist name="cat_list" id="vo" key="i">
- <li <?php if($_GET['cat'] == $vo['id']) echo 'class="selected"'; ?>><a href="{:U("Brand/$action_name",array('cat'=>$vo['id']))}">{$vo.name}</a></li>
- </volist>
- </ul>
- </div>
- <script type="text/javascript">
- $(function(){
- $(document).pjax('.pjax a', '#pjax-container',{
- type:'post',
- scrollTo:false,
- });
- $(document).on('pjax:click', function() {
- enable_loading = false;
- })
- $(document).on('pjax:send', function(){
- var str = "<p class='tc mt-10'>加载中...</p>";
- $('#pjax-container').html(str);
- })
- //最后一个右侧加边框
- $(".brand-news-nav ul li").last().children('a').addClass('last');
- $(".brand-news-nav ul li").click(function(){
- $(this).addClass('selected').siblings().removeClass('selected');
- })
- })
- </script>
- <!-- 文章列表页 -->
- <div class="wrap clearfix">
- <div class="brand-news-list fl" id="pjax-container">
- <include file="Brand:article_pjax" />
- </div>
- <div class="brand-news-right fr pb-20">
- <a href="{$adv3[0]['url']}"><img class="scrollLoading" data-url="{$adv3[0]['images']|showImagePath}" src="__PUBLIC__/index/images/loading270x160.gif" width="260" height="150"></a>
- <p class="title mt-10">法律支持</p>
- <ul class="bgc-fff">
- <volist name="law_list" id="vo">
- <a href="{:U('law',array('id'=>$vo['id']))}"><li>{$vo.name}</li></a>
- </volist>
- </ul>
- <button class="btn btn-right mt-10 btn-consult">免费咨询</button>
- <script type="text/javascript">
- $(function(){
- //最后一个需要添加一个last的样式
- $(".brand-news-right li:last").addClass('last');
- })
- </script>
- </div>
- </div>
- </div>
服务器端处理
- if(is_pjax()){
- $this->display('article_pjax');
- }else{
- $this->display('article');
- }
- //判断是否是pjax请求
- function is_pjax(){
- return array_key_exists('HTTP_X_PJAX', $_SERVER) && $_SERVER['HTTP_X_PJAX'];
- }
其中的主要思想就是当 .pjax a 进行点击的时候,将#pjax-container的内容替换为请求后的内容。在后端处理时需要判断是否是pjax请求,如果是需要进行局部渲染,如果不是进行全部渲染。
因为pjax用到了html5技术,如果浏览器不支持html5那么网站会正常进行跳转式的加载,如果支持那么只是进行局部渲染(但是浏览器地址栏中的url会正常跟着a链接进行变动)。
注意上述的js代码中在配置pjax时有个参数scrollTo:false,加上此参数表示点击连接后网页的scrollBar不会变动,如没有此参数,每次点击时浏览视窗会自动跳转到网页顶部
黄聪:pjax使用心得总结的更多相关文章
- 黄聪:如何使用CodeSmith批量生成代码(转:http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html)
先看看CodeSmith的工作原理: 简单的说:CodeSmith首先会去数据库获取数据库的结构,如各个表的名称,表的字段,表间的关系等等,之后再根据用户自定义好的模板文件,用数据库结构中的关键字替代 ...
- [转]黄聪:如何使用CodeSmith批量生成代码
本文转自:http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html 在上一篇我们已经用PowerDesigner创建好了需要的测 ...
- 黄聪:《跟黄聪学WordPress插件开发》
续<跟黄聪学WordPress主题开发>之后,又一个作品完成!<跟黄聪学Wordpress插件开发>,国内最好的Wordpress插件开发视频教程!! 目录预览: WordPr ...
- 黄聪:PHP使用Simple_HTML_DOM遍历、过滤及保留指定属性
<? /* * 参考资料: * http://www.phpddt.com/manual/simplehtmldom_1_5/manual_api.htm * http://www.phpddt ...
- 黄聪:《跟黄聪学WordPress主题开发》
又一个作品完成!<跟黄聪学Wordpress主题开发>,国内最好的Wordpress主题模版开发视频教程!! 目录预览: WordPress官方源文件层式结构讲解 WordPress数据库 ...
- 黄聪:VS2010开发如何在c#中使用Ctrl、Alt、Tab等全局组合快捷键
1.新建一个类 HotkeyHelper using System; using System.Runtime.InteropServices; using System.Windows.Forms ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block 开发人员经常编写需要安全功能的应用程序.这些应用程序 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block 使用企业库异常处理应用程序模块的 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Access Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Access Application Block 企业库数据库访问模块通过抽象工厂模式,允许用户 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block 企业库日志应用程序模块工作原理图: 从上图我们可以 ...
随机推荐
- Max(rowid)是否走B树索引
Max(rowid)是否走B树索引 测试:SQL文本Max(rowid)执行计划是否走B树索引测试 一.猜测执行计划 当SQL语句中,执行max(rowid)时,执行计划猜测: A走B树索引全索引范围 ...
- 阿里云-centos7.2-LNMP-编译安装-记录
1. 需要使用yum源自动安装的软件: yum -y install autoconf bzip2 bzip2-devel curl curl-devel e2fsprogs e2fsprogs-de ...
- [LeetCode&Python] Problem 705. Design HashSet
Design a HashSet without using any built-in hash table libraries. To be specific, your design should ...
- react写单选按钮或table标签
首先,原理是一样的: class Loca_choose_wrap extends Component{ constructor(){ super(); this.state={ port_name: ...
- 51Nod 1240:莫比乌斯函数
1240 莫比乌斯函数 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使 ...
- doc四则运算
import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.ut ...
- 【Wannafly挑战赛22A计数器】【裴蜀定理】
https://www.nowcoder.com/acm/contest/160/A 题目描述 有一个计数器,计数器的初始值为0,每次操作你可以把计数器的值加上a1,a2,...,an中的任意一个整数 ...
- 《DSP using MATLAB》Problem 5.38
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...
- Linux常用命令详解-目录文件操作命令
来源:https://www.linuxidc.com/Linux/2018-04/151801.htm 现实中,服务器(包含Linux,Unix,Windows Server)一般都摆放在机房里,因 ...
- debian 配置linuxptp 软件时间戳
编程之路刚刚开始,错误难免,希望大家能够指出. ntp,ptp,ntp,ptp 本文只说软件时间戳 先上几个推荐的网址,可以更好的了解ptp: https://docs.fedoraproject.o ...