pajax是使用ajax+pushState打造无刷新改变URL的方式。虽然这种方式是将ajax、history.pushState、history.replaceStatte、window.onpopstate等几个技术点结合,但在具体使用中还是要考虑到很多情况的,如:
1、改变内容的时候也要改变title
2、不支持的浏览器如何处理
3、事件如何绑定,是否使用了delegate模式
4、ajax异常处理
5、ajax前后的自定义事件等
介于有上面等多的疑问,将ajax和pushState封装下,供后面使用还是非常有帮助的。本文就是对pjax(ajax+pushState)的一个介绍
介绍
pjax是对ajax + pushState的封装,让你可以很方便的使用pushState技术。
同时支持了缓存和本地存储,下次访问的时候直接读取本地数据,无需在次访问。
并且展现方式支持动画技术,可以使用系统自带的动画方式,也可以自定义动画展现方式。
目前只提供了基于jquery的版本,后续将增加基于qwrap, tangram等版本。
如何使用
将jquery.pjax.js部署到你的页面中,将需要使用pjax的a链接进行绑定(不能绑定外域的url),如:
$('a').pjax({
container: '#container', //内容替换的容器
fx: 'fade', //展现的动画,支持默认和fade, 可以自定义动画方式。
cache: true, //是否使用缓存
storage: true, //是否使用本地存储
titleSuffix: '' //标题后缀
})
事件(events)
一般情况下使用ajax来获取数据的时候,我们都希望有个loading的效果,pjax本身不提供这个功能,但提供了2个相关的事件。 如果需要这样的功能,可以在事件里实现这种功能。
- start.pjax 在pjax ajax发送request之前调用
- end.pjax 在phax ajax结束时调用
这样你可以在start.pjax事件里显示loading效果,在end.pjax事件里隐藏loading了。如:
$('#container').bind('start.pjax', function(){
$('#loading').show();
})
$('#container').bind('end.pjax', function(){
$('#loading').hide();
})
浏览器支持
提供了history.pushState接口的浏览器才支持这个功能,$.support.pjax是用来判断浏览器是否支持的。
如果浏览器不支持这个功能而调用pjax方法的话,实际上什么都没做,还是使用默认的链接响应机制
后端需要做的
类似于ajax, 异步请求的时候后端不能将公用的内容也返回。
所以需要一个判断是否pjax请求的接口。如:php可以借鉴下面的实现
function gplus_is_pjax(){
return array_key_exists('HTTP_X_PJAX', $_SERVER) && $_SERVER['HTTP_X_PJAX'] === 'true';
}
下载源代码
pjax已经开源,代码放在https://github.com/welefen/pjax 上,欢迎大家访问和下载。
其他
实际上该类的封装借鉴于https://github.com/defunkt/jquery-pjax
对其增加了缓存、本地存储和动画等功能,并且将一些参数进行了优化。
分享到:
相关推荐
Pjax(PushState + Ajax)这个名字很好地概述了它的核心功能:结合了Ajax的异步数据获取和HTML5 History API的PushState特性。在本文中,我们将深入探讨jQuery Pjax的工作原理、常见问题及其解决方法。 ### 1. Pjax...
它结合了Ajax(异步JavaScript和XML)和HTML5的History API(尤其是PushState方法),旨在提供更快的页面加载速度,提升用户体验,同时保持URL的可书签性和回退功能。 **Ajax简介** Ajax(异步JavaScript和XML)...
**Pjax(Push State + Ajax)** 就是为了解决这一问题而出现的一个技术,它是对Ajax和`pushState()`的封装,简化了它们的使用,使得开发者可以更轻松地实现无刷新页面跳转。Pjax的核心思想是,当用户点击链接时,...
pjax ( { selector : 'a' , container : '#content' } ) ; 服务器 /** * index * @return * @throws Exception */ public View index() throws Exception { JspView view; String user_agent = request . ...
Pjax是一个jQuery插件,它使用ajax和pushState通过真正的永久链接,页面标题和后退按钮提供快速浏览体验。 查看更多或访问 ##为什么要用Pjax? 只是使用ajax从远程加载容器? 是的,但不仅如此。 不再加载css和js...
睡衣pushState + ajax = pjax,一个轻量级的纯JavaScript pjax库,或仅用作ajax为什么所以您问自己,为什么还要另一个pjax库? 简而言之,恕我直言,大多数其他库都过于复杂,使用仅仅是一种方式,最重要的是,库与...
Pjax,全称为Push State + AJAX,是一种优化网页加载速度的技术,它结合了浏览器的History API(HTML5中的pushState和replaceState方法)和AJAX(异步JavaScript和XML)来实现页面的部分更新,从而避免了整个页面的...
Pjax(Push State + AJAX)是一种优化网页用户体验的技术,它结合了HTML5的History API(PushState)和AJAX(Asynchronous JavaScript and XML)技术,主要用于实现页面的无刷新加载,提升用户在浏览网站时的流畅性...
Pjax,全称是Push State + AJAX,是一种结合了HTML5 History API和AJAX技术的网页开发方式,它的主要目标是实现页面的快速加载,提升用户体验,同时保持浏览器历史记录的连贯性。在传统的AJAX应用中,虽然可以异步...
轻松在任何网站上启用快速AJAX导航(使用pushState()+ XHR) Pjax是一个独立JavaScript模块,使用 (XmlHttpRequest)和来提供快速的浏览体验。 它使您可以完全改变标准网站(服务器端生成的网站或静态网站)的...
1. **源代码**:JavaScript文件,实现了Pjax的核心逻辑,可能有一个主文件如`pjax.js`,负责事件监听、Ajax请求和DOM操作。 2. **示例**:一个或多个HTML文件,展示了如何在实际项目中集成和使用Pjax库。 3. **样式*...
1. **History API**:HTML5引入了History API,包括`history.pushState()`和`history.replaceState()`方法,它们允许我们在不重新加载页面的情况下改变URL。当用户点击链接时,Pjax首先使用这些方法更新浏览器的URL...
Pjax(Pushstate + Ajax)是一种结合了浏览器的历史状态API(history.pushState)与Ajax技术的技术,它允许用户在浏览网站时,只更新页面的一部分内容,而无需完全刷新页面。Pjax的核心在于history.pushState,这是...
3. **处理响应**:服务器返回新内容后,Pjax将这些内容插入到页面的适当位置,同时使用`pushState()`更新浏览器的URL和历史记录。 4. **页面动画效果**:为了增强用户体验,通常会添加一些过渡动画,使得页面内容的...
Pjax,即PushState + AJAX的缩写,是一种网页应用技术,允许我们在不刷新整个页面的情况下,只更新部分DOM元素。这种技术结合了传统HTTP请求的URL管理和AJAX的局部内容更新,从而实现了快速的页面导航。在WordPress...
本篇文章介绍的是利用AJAX技术和HTML5中新增的History API中的history.pushState和history.replaceState方法,实现在不刷新页面的情况下改变浏览器的URL地址。下面将详细介绍这些技术的具体用法和应用场景。 ### ...
在 Laravel 框架中,Pjax(Push State + AJAX)是一种增强网页用户体验的技术,它允许用户在不重新加载整个页面的情况下更新内容,只刷新部分区域,从而提高页面加载速度和交互性。Pjax 结合了浏览器的 History API ...
2. **PJAX原理**:PJAX结合了HTML5的History API(用于改变浏览器的URL而不实际跳转)和AJAX(异步JavaScript和XML,用于在不刷新整个页面的情况下更新部分内容)。当用户点击链接时,PJAX会发送一个Ajax请求,...
Ajax-jquery-pjax.zip,pushState ajax=pjax,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新加载网页的情况下更改。