Pjax的使用

简介:

是一种页面局部刷新的功能,基于Ajax的。其不同之处在与,插件可以默认绑定替换刷新的div,同时会有浏览器的历史记录【可以进行前进后退操作】。

其中有一个很重要的组成部分, 这些网站的ajax刷新是支持浏览器历史的, 刷新页面的同时, 浏览器地址栏位上面的地址也是会更改, 用浏览器的回退功能也能够回退到上一个页面。

优劣:

  • 提高用户体验,减少带宽使用
  • 浏览器兼容问题,服务器端的复杂

官方代码库

github: jquery-pjax

使用教程

最简单使用 $.fn.pjax 【失败了(ノ`Д)ノ】

最简单的例子,使所有a标签都为pjax进行请求,内容替换第二个参数的div。

$(document).pjax('a','#pjax-container')

高级用法,可指定标签:如下

$(document).pjax('[data-pjax] a,a[data-pjax]','#pjax-container')

木有错就是这么简单,但是我的测试失败了。
使用的时候,后台服务端接受到了两个请求:

String pjax_headerString = request.getHeader("X-PJAX");
System.out.println("is pjax? :"+pjax_headerString);
--is pjax? :true     //这个是对的
--is pjax? :null         //这个不知道是哪里来的(ノ`Д)ノ 导致页面直接跳转刷新了
使用参数的用法$.pjax【成功】
<script type="text/javascript">  
                function test(){
                    $.pjax({url: '${ctx}/statistics/simpleReport/xiaohangTestPjax?data='+new Date().getTime(),container: '#pjax-container'});
                    return false;
                }

        </script>

    <button type="button" id="redbtn" onclick = "test()">测试 点这里 ↓↓div的内容会变化</button>
    <div id = "pjax-container" style="width: 1000px;height: 300px;background-color: rgba(102,102,0.52);">
        hello  这是变化的部分  会变成demo2 页面的 表格
    </div>

页面是可以正常的更新了<div id = "pjax-container">的。O(∩_∩)O~

参数详情:
key default description
timeout 650 ajax timeout in milliseconds after which a full refresh is forced
push true use pushState to add a browser history entry upon navigation
replace false replace URL without adding browser history entry
maxCacheLength 20 maximum cache size for prevIoUs container contents
version a string or function returning the current pjax version
scrollTo 0 vertical position to scroll to after navigation. To avoid changing scroll position,pass false.
type "GET" see $.ajax
dataType "html" see $.ajax
container CSS selector for the element where content should be replaced
url link.href a string or function that returns the URL for the ajax request
target link eventually the relatedTarget value for pjax events
fragment CSS selector for the fragment to extract from ajax response

设置参数的写法也可以是这样子的:

$.pjax.defaults.timeout = 12000;
$.pjax.defaults.replace = true;
其他用法:$.pjax.reload【测试成功√】

Initiates a request for the current URL to the server using pjax mechanism and replaces the container with the response. Does not add a browser history entry.[不添加一个浏览器历史记录。]

function test_reload(){
    $.pjax.reload('#pjax-container',{url: '${ctx}/statistics/simpleReport/xiaohangTestPjax?data='+new Date().getTime()}); 
    //$.pjax.reload('#pjax-container',options); ←← 就是这个样子 ↑↑
}
其他用法:$.pjax.submit【测试成功√】
$(document).on('submit','form[data-pjax]',function(event) {  //所需要修改的为第二个参数,确定页面中from表单,
  $.pjax.submit(event,'#pjax-container')
})
其他用法:$.pjax.click【失败了(ノ`Д)ノ】
if ($.support.pjax) {
  $(document).on('click','a[data-pjax]',function(event) {
    var container = $(this).closest('[data-pjax-container]')
    var containerSelector = '#' + container.id
    $.pjax.click(event,{container: containerSelector})
  })
}

事件Events

Pjax东东自带的一些事件处理。

event cancel arguments notes
event lifecycle upon following a pjaxed link
pjax:click ✔︎ options fires from a link that got activated; cancel to prevent pjax
pjax:beforeSend ✔︎ xhr,options can set XHR headers
pjax:start xhr,options
pjax:send xhr,options
pjax:clicked options fires after pjax has started from a link that got clicked
pjax:beforeReplace contents,options before replacing HTML with content loaded from the server
pjax:success data,status,xhr,options after replacing HTML content loaded from the server
pjax:timeout ✔︎ xhr,options fires after options.timeout; will hard refresh unless canceled
pjax:error ✔︎ xhr,textStatus,error,options on ajax error; will hard refresh unless canceled
pjax:complete xhr,options always fires after ajax,regardless of result
pjax:end xhr,options

event lifecycle on browser Back/Forward navigation

event cancel arguments notes
pjax:popstate event direction property: “back”/”forward”
pjax:start null,options before replacing content
pjax:beforeReplace contents,options right before replacing HTML with content from cache
pjax:end null,options after replacing content
例如【发送和完成事件】:

在pjax发送请求的时候调用事件pjax:send,完成更新页面之后回调事件pjax:complete;

$(document).on('pjax:send',function() {
  $('#loading').show()
})
$(document).on('pjax:complete',function() {
  $('#loading').hide()
})
例如【pjax超时事件】:

pjax请求超时时调用自定义事件处理。

$(document).on('pjax:timeout',function(event) {
  // Prevent default timeout redirection behavior
  event.preventDefault()
})

其他东东:

  • pjax加载的页面中的中文乱码问题【为解决】
  • 这个pjax如果和Jfinaly一起使用,似乎是不错的选择呢。

2017-08-04
小杭

测试使用的代码:

<head>
    <title>小杭测试</title>
    <Meta name="decorator" content="default"/>
    <script src="${ctxStatic}/jquery/jquery.pjax.js" type="text/javascript"></script>
        <script type="text/javascript">        
                    $(document).on('submit','form',function(event) {
                          $.pjax.submit(event,'#pjax-container')
                        })

                    $(document).on('click','a',function(event) {  //失败了(ノ`Д)ノ
                        var container = $(this).closest('#pjax-container')
                        var containerSelector = '#' + container.id
                        $.pjax.click(event,{container: containerSelector})
                    })

                    $(document).on('pjax:send',function() {
                      $('#loading').show()
                    })
                    $(document).on('pjax:complete',function() {
                      $('#loading').hide()
                    })

                    function test(){
                        $.pjax({url: '${ctx}/statistics/simpleReport/xiaohangTestPjax?data='+new Date().getTime(),container: '#pjax-container'});
                        return false;
                    }
                    function test_reload(){
                        $.pjax.reload('#pjax-container',{url: '${ctx}/statistics/simpleReport/xiaohangTestPjax?data='+new Date().getTime()}); 
                    }
            </script>
</head>
<body>
    <div class="content">

        <a href="${ctx}/statistics/simpleReport/xiaohangTestPjax?data=11111" >demo1</a>
        <button type="button" id="redbtn" onclick = "test()">测试 点这里 ↓↓div的内容会变化</button>
        <button type="button" id="redbtn" onclick = "test_reload()">reload </button>

        <form id="searchForm"  action="${ctx}/statistics/simpleReport/xiaohangTestPjax" method="post" class="breadcrumb form-search">
            <label>表单提交测试-参数:</label> <input id="organId" name="organId" maxlength="32" class="input-medium"/>

            <label>表单提交测试-参数:</label><input type="button" class="btn btn-primary" onclick="test_submit()" value="查询button"/> <input id="dsubmit" class="btn btn-primary" type="submit" value="查询submit"/>
        </form>

        <div id = "pjax-container" style="    width: 1000px;    height: 300px;    background-color: rgba(102,0.52);">
            hello  这是变化的部分  会变成demo2 页面的 表格
        </div>

         <div id = "loading" style="    width: 100px;    height: 100px;    background-color: rgba(102,0.52);">
            .............................这个是loding
        </div>

    </div>
</body>

Pjax的学习使用的更多相关文章

  1. 详解使用postMessage解决iframe跨域通信问题

    这篇文章主要介绍了详解使用postMessage解决iframe跨域通信问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. HTML5数字输入仅接受整数的实现代码

    这篇文章主要介绍了HTML5数字输入仅接受整数的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码

    这篇文章主要介绍了HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

  4. 浅谈html5之sse服务器发送事件EventSource介绍

    本篇文章主要介绍了浅谈html5之sse服务器发送事件EventSource介绍,具有一定的参考价值,有兴趣的可以了解一下

  5. HTML5 拖放(Drag 和 Drop)详解与实例代码

    本篇文章主要介绍了HTML5 拖放(Drag 和 Drop)详解与实例代码,具有一定的参考价值,有兴趣的可以了解一下

  6. ios – Swift中的非响应流委托

    所以我在Swift中使用套接字并试图将应用程序与我的服务器连接起来.我让应用程序连接到服务器的IP地址,并在服务器上使用netcat进行测试.在执行期间,应用程序的控制台输出显示它已成功连接到服务器.但是,流委托似乎没有响应.当我输入netcat时,app控制台没有打印任何内容.我已经搜索了很长一段时间,发现我的实现与其他实现非常相似.也许我在这里遗漏了一些我看不到的东西.任何想到这个问题的人都将不胜感激!

  7. ios – UIScrollView内容不允许用户交互

    我有一个启用了分页的UIScrollView,如下所示:在UIScrollView中,我添加了几个UIWebViews,并将其启用的交互设置为是这样的.它打破了UIScrollView上的分页和所有触摸.如果我将用户交互设置为NO,则页面有效,但我无法在UIWebView中突出显示文本.我试着像下面那样对UIScrollView进行子类化,但是会出现同样的情况.任何的想法?

  8. ios – 如何知道用户在iPhone中的播放控件上单击快进和快退按钮

    还是有其他方法吗?

  9. ios – 如何在使用隐式动画为CALayer设置动画时继承动画属性

    我试图使用隐式动画在CALayer上设置自定义属性的动画:在-actionForKey:方法我需要返回动画,负责插值.当然,我必须以某种方式告诉动画如何检索动画的其他参数.有关如何实现这一点的任何想法?

  10. ios – touchesMoved在iPhone 6s及以后的单点击中被调用

    解决方法可能是更高分辨率的屏幕对任何移动都更敏感.当你敲击时,你实际上可能正在滚动你的手指,使它看起来像一个小动作.两种可能的解决方>在touchesMoved:方法中检查触摸移动了多远.如果这是一个非常小的举动,请忽略它以进行_isTapped检查.>而不是覆盖触摸…

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部