初次结识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的详细说明和使用方法,这里不再赘述,本文主要是使用中的一些代码记录和使用心得,方便以后查阅快速上手使用。

看下下述小段代码:

  1. <div class="body">
  2. <?php $action_name = $Think.ACTION_NAME; ?>
  3. <!-- 头部哟 -->
  4. <?php if ($action_name == 'news'): ?>
  5. <include file="Brand:header_news" />
  6. <?php elseif ($action_name == 'forum'): ?>
  7. <include file="Brand:header_forum" />
  8. <?php endif; ?>
  9. <!-- 资讯的二级分类 -->
  10. <div class="cb"></div>
  11. <div class="brand-news-nav pjax">
  12. <ul class="clearfix">
  13. <li <?php if($_GET['cat'] == '') echo 'class="selected"'; ?>><a class="first" href="{:U("Brand/$action_name")}">全部</a></li>
  14. <volist name="cat_list" id="vo" key="i">
  15. <li <?php if($_GET['cat'] == $vo['id']) echo 'class="selected"'; ?>><a href="{:U("Brand/$action_name",array('cat'=>$vo['id']))}">{$vo.name}</a></li>
  16. </volist>
  17. </ul>
  18. </div>
  19. <script type="text/javascript">
  20. $(function(){
  21. $(document).pjax('.pjax a', '#pjax-container',{
  22. type:'post',
  23. scrollTo:false,
  24. });
  25. $(document).on('pjax:click', function() {
  26. enable_loading = false;
  27. })
  28. $(document).on('pjax:send', function(){
  29. var str = "<p class='tc mt-10'>加载中...</p>";
  30. $('#pjax-container').html(str);
  31. })
  32. //最后一个右侧加边框
  33. $(".brand-news-nav ul li").last().children('a').addClass('last');
  34. $(".brand-news-nav ul li").click(function(){
  35. $(this).addClass('selected').siblings().removeClass('selected');
  36. })
  37. })
  38. </script>
  39. <!-- 文章列表页 -->
  40. <div class="wrap clearfix">
  41. <div class="brand-news-list fl" id="pjax-container">
  42. <include file="Brand:article_pjax" />
  43. </div>
  44. <div class="brand-news-right fr pb-20">
  45. <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>
  46. <p class="title mt-10">法律支持</p>
  47. <ul class="bgc-fff">
  48. <volist name="law_list" id="vo">
  49. <a href="{:U('law',array('id'=>$vo['id']))}"><li>{$vo.name}</li></a>
  50. </volist>
  51. </ul>
  52. <button class="btn btn-right mt-10 btn-consult">免费咨询</button>
  53. <script type="text/javascript">
  54. $(function(){
  55. //最后一个需要添加一个last的样式
  56. $(".brand-news-right li:last").addClass('last');
  57. })
  58. </script>
  59. </div>
  60. </div>
  61. </div>

服务器端处理

  1. if(is_pjax()){
  2. $this->display('article_pjax');
  3. }else{
  4. $this->display('article');
  5. }
  1. //判断是否是pjax请求
  2. function is_pjax(){
  3. return array_key_exists('HTTP_X_PJAX', $_SERVER) && $_SERVER['HTTP_X_PJAX'];
  4. }

其中的主要思想就是当     .pjax a    进行点击的时候,将#pjax-container的内容替换为请求后的内容。在后端处理时需要判断是否是pjax请求,如果是需要进行局部渲染,如果不是进行全部渲染。

因为pjax用到了html5技术,如果浏览器不支持html5那么网站会正常进行跳转式的加载,如果支持那么只是进行局部渲染(但是浏览器地址栏中的url会正常跟着a链接进行变动)。

注意上述的js代码中在配置pjax时有个参数scrollTo:false,加上此参数表示点击连接后网页的scrollBar不会变动,如没有此参数,每次点击时浏览视窗会自动跳转到网页顶部

版权声明:本文为博主原创文章,如需转载,请注明出处。 https://blog.csdn.net/ROVAST/article/details/50678336

黄聪:pjax使用心得总结的更多相关文章

  1. 黄聪:如何使用CodeSmith批量生成代码(转:http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html)

    先看看CodeSmith的工作原理: 简单的说:CodeSmith首先会去数据库获取数据库的结构,如各个表的名称,表的字段,表间的关系等等,之后再根据用户自定义好的模板文件,用数据库结构中的关键字替代 ...

  2. [转]黄聪:如何使用CodeSmith批量生成代码

    本文转自:http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html 在上一篇我们已经用PowerDesigner创建好了需要的测 ...

  3. 黄聪:《跟黄聪学WordPress插件开发》

    续<跟黄聪学WordPress主题开发>之后,又一个作品完成!<跟黄聪学Wordpress插件开发>,国内最好的Wordpress插件开发视频教程!! 目录预览: WordPr ...

  4. 黄聪:PHP使用Simple_HTML_DOM遍历、过滤及保留指定属性

    <? /* * 参考资料: * http://www.phpddt.com/manual/simplehtmldom_1_5/manual_api.htm * http://www.phpddt ...

  5. 黄聪:《跟黄聪学WordPress主题开发》

    又一个作品完成!<跟黄聪学Wordpress主题开发>,国内最好的Wordpress主题模版开发视频教程!! 目录预览: WordPress官方源文件层式结构讲解 WordPress数据库 ...

  6. 黄聪:VS2010开发如何在c#中使用Ctrl、Alt、Tab等全局组合快捷键

    1.新建一个类 HotkeyHelper  using System; using System.Runtime.InteropServices; using System.Windows.Forms ...

  7. 黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block 开发人员经常编写需要安全功能的应用程序.这些应用程序 ...

  8. 黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block 使用企业库异常处理应用程序模块的 ...

  9. 黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Access Application Block

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Access Application Block 企业库数据库访问模块通过抽象工厂模式,允许用户 ...

  10. 黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block 企业库日志应用程序模块工作原理图:   从上图我们可以 ...

随机推荐

  1. LINUX7安装Oracle11g单实例小结

    LINUX7安装Oracle11g遇到问题如下,记录 添加组: groupadd -g 1000 oinstall #报错:提示组被占用 #useradd: group 'oinstall' does ...

  2. [opencvjichu]cv::Mat::type() 返回值

    opencv opencv中Mat存在各种类型,其中mat有一个type()的函数可以返回该Mat的类型.类型表示了矩阵中元素的类型以及矩阵的通道个数,它是一系列的预定义的常量,其命名规则为CV_(位 ...

  3. spring事务管理-Spring 源码系列(6)

    Spring事务抽象的是事务管理和事务策略.而实现则由各种资源方实现的.我们最常用的数据库实现:DataSourceTransactionManager 尝试阅读一下spring 的实现代码,由3个核 ...

  4. Ubuntu配置Github并且新建仓库push代码,从已有仓库clone代码,并且push

    Github是一款良好的管理代码的工具,使用的时候需要现在Ubuntu上进行配置,下面的内容分为三个部分,第一部分讲述如何在之前从未配置github的电脑配置github,第二部分讲述如何在远程新建一 ...

  5. webapi core2.1 IdentityServer4.EntityFramework Core进行配置和操作数据

    https://identityserver4.readthedocs.io/en/release/quickstarts/8_entity_framework.html 此连接的实践 vscode ...

  6. PS学习之动态表情制作

    准备素材 1. 2. 3. 4. 最后效果图: 在PS中打开四个图片 另外新建一个文件 用魔棒工具抠图 点击白色位置 右键选择反向 右键人物 选择拷贝的图层 重复,将四个图片扣好 拖到新建的文件里 如 ...

  7. 铁三测试题——权限、你是管理员吗?——WP

    权限 [题目描述]:你是管理员吗? [解题链接]:http://ctf4.shiyanbar.com/web/root/index.php 首先看题,提到“权限”,“管理员”,这就是说涉及到管理员的账 ...

  8. ionic中 ng-repeat下使用ng-model获取不到选中数据问题:

    在这种情况下点击了单选框并不能获取$scope.unitcode的值: <ion-list> <ion-radio ng-repeat="item in userInfos ...

  9. html2canvas用法的总结(转载)

    最近做h5网页,有个功能是用户能长按页面保存为图片,在我们理解就是网页要生成图片然后再让用户长按保存,然后就发现了html2canvas这个框架了,效果挺不错了,但是有几个坑说一下(用的最新版): h ...

  10. diskcache

    DiskCache: Disk Backed Cache DiskCache is an Apache2 licensed disk and file backed cache library, wr ...