PJAX初步探究

作者: 明月半倚深秋_f45e | 来源:发表于2017-10-23 22:05 被阅读25次

这段时间一直在做vtiger的二次开发
在做新模块的时候发现vtiger很多页面是用pjax技术实现的
虽然说我也可以用ajax,为了和它本身统一
于是我只好用它的这种方式来做

Pjax=pushState + Ajax
Pjax和Ajax的最大的区别是
当页面有数据交互时,能够改变地址栏的地址
用户可以用前进和后退来查看 交互前后的内容

还有一点就是,pjax返回的是 带html标签的字符串
所以请求后台后,返回的是
<div>内容</div>.........

下面说一下Pjax的用法

<body>
  <h1>My Site</h1>
  <div>
    <input type="button" id="clickMe" value="GO">
  </div>
  <div id="container"></div>    
</body>
<script src="jquery.js"></script>
<script src="pjax.js"></script>
<script type="text/javascript">
$(function(){
    $('#clickMe').click(function(){
        $.pjax({
            url: 'res3.php',
            container: '#container'
        });
    });
});
$(document).on('pjax:start', console.log(1)).on('pjax:end',console.log(2));
</script>

先加载jquery和pjax
用$.pjax来触发,url是请求地址,container是显示内容的 DOM选择器

$.pjax({
            url: 'res3.php',
            container: '#container'
        });

options默认参数说明
参数名 默认值 说明
timeout 650 ajax 超时时间(单位ms),超时后会执行默认的页面跳转,所以超时时间不应过短,不过一般不需要设置
push true 使用window.history.pushState改变地址栏url(会添加新的历史记录)
replace false 使用window.history.replaceState改变地址栏url(不会添加历史记录)
maxCacheLength 20 缓存的历史页面个数(pjax加载新页面前会把原页面的内容缓存起来,缓存加载后其中的脚本会再次执行)
version 是一个函数,返回当前页面的pjax-version,即页面中<meta http-equiv="x-pjax-version">标签内容。使用response.setHeader("X-PJAX-Version", "")设置与当前页面不同的版本号,可强制页面跳转而不是局部刷新。
scrollTo 0 页面加载后垂直滚动距离(与原页面保持一致可使过度效果更平滑)
type "GET" ajax的参数,http请求方式
dataType "html" ajax的参数,响应内容的Content-Type
container 用于查找容器的CSS选择器,[container]参数没有指定时使用
url link.href 要跳转的连接,默认a标签的href属性
target link pjax事件参数e的relatedTarget属性,默认为点击的a标签
fragment 使用响应内容的指定部分(css选择器)填充页面,服务端不进行处理导致全页面请求的时候需要使用该参数,简单的说就是对请求到的页面做截取

这些值直接加在url后面即可
下面再说一下Pjax的事件

事件名 支持取消 参数 说明
pjax:click ✔ options 点击按钮时触发。可调用e.preventDefault();取消pjax
pjax:beforeSend ✔ xhr, options ajax执行beforeSend函数时触发,可在回调函数中设置额外的请求头参数。可调用e.preventDefault();取消pjax
pjax:start xhr, options pjax开始(与服务器连接建立后触发)
pjax:send xhr, options pjax:start之后触发
pjax:clicked options ajax请求开始后触发
pjax:beforeReplace contents, options ajax请求成功,内容替换渲染前触发
pjax:success data, status, xhr, options 内容替换成功后触发
pjax:timeout ✔ xhr, options ajax请求超时后触发。可调用e.preventDefault();继续等待ajax请求结束
pjax:error ✔ xhr, textStatus, error, options ajax请求失败后触发。默认失败后会跳转url,如要阻止跳转可调用 e.preventDefault();
pjax:complete xhr, textStatus, options ajax请求结束后触发,不管成功还是失败
pjax:end xhr, options pjax所有事件结束后触发

用法上面也写出了
$(document).on('pjax:start', console.log(1)).on('pjax:end',console.log(2));
用document.on来绑定方法就行了

相关文章

  • PJAX初步探究

    这段时间一直在做vtiger的二次开发在做新模块的时候发现vtiger很多页面是用pjax技术实现的虽然说我也可以...

  • xvfb 初步探究

    转载:http://blog.csdn.net/span76/article/details/11473315 有...

  • MySQL 初步探究

    MySQL 是最流行的关系型数据库管理系统,在WEB应用方面 MySQL 是最好的RDBMS(Relational...

  • pjax原理和使用

    原文:https://www.fanhaobai.com/2017/07/pjax.html pjax 即 pus...

  • jquery-pjax官方翻译

    pjax = pushState + ajax pjax是一个jQuery插件,它使用ajax和pushState...

  • laravel-pjax【在 Laravel 5 中集成 Pja

    jquery-pjax说明 简介 Pjax 是一个 jQuery 插件,其作用是使用 ajax 来加速页面加载时间...

  • pjax

    http://www.zhangxinxu.com/wordpress/2013/06/html5-history...

  • jquery-pjax学习记录

    pjax是什么 pjax是jquery的一个插件,它使用ajax和pushState两个技术改善用户的网页浏览体验...

  • Hbase hfile索引初步探究

    1、索引结构解析: Root Index Block--根据Index Entry的个数,加载到内存,因为Inde...

  • 怎么在 CakePHP 项目中集成 PJAX

    之前发了一篇帖子提到 在 Symfony 中与 Pjax 集成,使用 Pjax 进行单页加速;这次来讲一下怎么在c...

网友评论

    本文标题:PJAX初步探究

    本文链接:https://www.haomeiwen.com/subject/hdaouxtx.html