使用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 相关文章推荐
JSON 和 JavaScript eval使用说明
Jun 13 Javascript
javascript学习之闭包分析
Dec 02 Javascript
提高jQuery性能的十个诀窍
Nov 14 Javascript
JavaScript中使用document.write向页面输出内容实例
Oct 16 Javascript
纯js实现重发验证码按钮倒数功能
Apr 21 Javascript
jQuery遍历DOM节点操作之filter()方法详解
Apr 14 Javascript
javascript正则表达式中分组详解
Jul 17 Javascript
浅谈JS中的bind方法与函数柯里化
Aug 10 Javascript
详解webpack+es6+angular1.x项目构建
May 02 Javascript
angularjs实现table表格td单元格单击变输入框/可编辑状态示例
Feb 21 Javascript
vue2配置scss的方法步骤
Jun 06 Javascript
Angular进行简单单元测试的实现方法实例
Aug 16 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 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
2006/10/09 PHP
PHP邮件专题
2006/10/09 PHP
php Static关键字实用方法
2010/06/04 PHP
文本加密解密
2006/06/23 Javascript
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
动态加载script文件的两种方法
2013/08/15 Javascript
JQuery Highcharts 动态生成图表的方法
2013/11/15 Javascript
关于JavaScript中name的意义冲突示例介绍
2014/05/29 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
JavaScript检查数字是否为整数或浮点数的方法
2015/06/09 Javascript
jquery实现可关闭的倒计时广告特效代码
2015/09/02 Javascript
15个常用的jquery代码片段
2015/12/19 Javascript
jQuery实现选中行变色效果(实例讲解)
2017/07/06 jQuery
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
vue基于Element构建自定义树的示例代码
2017/09/19 Javascript
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
对TypeScript库进行单元测试的方法
2019/07/18 Javascript
Layui数据表格 前后端json数据接收的方法
2019/09/19 Javascript
给Python初学者的一些编程技巧
2015/04/03 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
python实现图片批量压缩程序
2018/07/23 Python
解决python3捕获cx_oracle抛出的异常错误问题
2018/10/18 Python
selenium+python自动化测试之多窗口切换
2019/01/23 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
对Matlab中共轭、转置和共轭装置的区别说明
2020/05/11 Python
python的Jenkins接口调用方式
2020/05/12 Python
StubHub西班牙:购买和出售全球活动门票
2017/06/05 全球购物
美国批发供应商:Kole Imports
2019/04/10 全球购物
门卫岗位安全职责
2013/12/13 职场文书
授权委托书样本及填写说明
2014/09/19 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
大学生入党自荐书
2015/03/05 职场文书
DBCA命令行搭建Oracle ADG的流程
2021/06/11 Oracle
Android中View.post和Handler.post的关系
2022/06/05 Java/Android