使用pjax实现无刷新更改页面url


Posted in Javascript onFebruary 05, 2015

我们都知道ajax给浏览器带来了异步加载的能力,在数据校验、局部刷新等方面提升了用户体验,但同时存在如下问题:

1. 可以无刷新改变页面内容,但无法改变页面URL
2. hash的方式不能很好的处理浏览器的前进、后退等问题

为了解决传统ajax带来的问题,HTML5里加强了history API,加入了pushState、replaceState接口和popstate事件。这里就不详细介绍了,没有这方面知识的同学建议先看一下相关的资料。

pjax插件封装了pushState和ajax操作,为我们提供了一个开发这这类web应用的简单方法,具体步骤如下:

定义需要局部更新的容器

<div id="container"></div>
初始化pjax,监听URL

$(function(){

// pjax

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

$.pjax.reload('#container');

})

后端处理pjax请求

后端的处理逻辑是,首先判断是不是pjax请求,如果是的话,根据请求参数返回局部内容,否则返回layout布局,然后由`$.pjax.reload('#container');`发起pjax请求。根据以上逻辑可以写出如下代码:

var pjaxFilter = function(req, res, next) {

if (req.get('X-PJAX')) {

next();

return;

}

//如果不是pjax请求的话直接返回布局模板

res.render('layout', { title: 'Pjax simple demo' });

};

router.get('/', pjaxFilter, function(req, res) {

res.render('index');

});

router.get('/poem/:id', pjaxFilter, function(req, res) {

var poemId = req.params.id;

res.render('poem/' + poemId);

})

完整代码:pjax-demo

这只是pjax最基础的功能,pjax提供了丰富的api,请访问:jquery-pjax

Javascript 相关文章推荐
js 得到文件后缀(通过正则实现)
Jul 08 Javascript
jquery ready(fn)事件使用介绍
Aug 21 Javascript
将input file的选择的文件清空的两种解决方案
Oct 21 Javascript
JQueryiframe页面操作父页面中的元素与方法(实例讲解)
Nov 19 Javascript
通过JS来动态的修改url,实现对url的增删查改
Sep 01 Javascript
JS实现alert中显示换行的方法
Dec 17 Javascript
微信小程序 小程序制作及动画(animation样式)详解
Jan 06 Javascript
Angular多选、全选、批量选择操作实例代码
Mar 10 Javascript
angularjs之$timeout指令详解
Jun 13 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
Jun 15 Javascript
使用FormData实现上传多个文件
Dec 04 Javascript
React实现类似淘宝tab居中切换效果的示例代码
Jun 02 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
Feb 05 #Javascript
jquery手风琴特效插件
Feb 04 #Javascript
Jquery中find与each方法用法实例
Feb 04 #Javascript
javascript中Array数组的迭代方法实例分析
Feb 04 #Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
Feb 04 #Javascript
15款jQuery分布引导插件分享
Feb 04 #Javascript
jquery $(document).ready()和window.onload的区别浅析
Feb 04 #Javascript
You might like
使用PHP批量生成随机用户名
2008/07/10 PHP
php获取文件大小的方法
2014/02/26 PHP
基于win2003虚拟机中apache服务器的访问
2017/08/01 PHP
javascript 正则表达式相关应介绍
2012/11/27 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
javascript中innerText和innerHTML属性用法实例分析
2015/05/13 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
2015/07/03 Javascript
jQuery检测某个元素是否存在代码分享
2015/07/09 Javascript
input 禁止输入特殊字符的四种实现方式
2016/08/24 Javascript
Vue.js教程之计算属性
2016/11/11 Javascript
JavaScript之map reduce_动力节点Java学院整理
2017/06/29 Javascript
vue-cli启动本地服务局域网不能访问的原因分析
2018/01/22 Javascript
react native 获取地理位置的方法示例
2018/08/28 Javascript
koa+mongoose实现简单增删改查接口的示例代码
2019/05/13 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
2019/09/19 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
[02:24]DOTA2亚洲邀请赛 NAVI战队出场宣传片
2015/02/07 DOTA
探究Python中isalnum()方法的使用
2015/05/18 Python
详解在Python中处理异常的教程
2015/05/24 Python
pycharm远程linux开发和调试代码的方法
2018/07/17 Python
win7下python3.6安装配置方法图文教程
2018/07/31 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
python 提取key 为中文的json 串方法
2018/12/31 Python
Pycharm 字体大小调整设置的方法实现
2019/09/27 Python
HTML5中外部浏览器唤起微信分享
2020/01/02 HTML / CSS
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
大学四年规划书范文
2013/12/27 职场文书
施工资料员岗位职责
2014/01/06 职场文书
银行员工辞职信范文
2014/01/20 职场文书
网络工程师职业规划
2014/02/10 职场文书
船舶工程技术专业求职信
2014/08/07 职场文书
单位个人查摆问题及整改措施
2014/10/28 职场文书
捐款感谢信
2015/01/20 职场文书
推普标语口号大全
2015/12/26 职场文书
你喜欢篮球吗?Python实现篮球游戏
2021/06/11 Python