使用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 相关文章推荐
JAVASCRIPT style 中visibility和display之间的区别
Jan 22 Javascript
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
Sep 12 Javascript
深入分析js中的constructor和prototype
Apr 07 Javascript
file模式访问网页时iframe高度自适应解决方案
Jan 16 Javascript
JS清空多文本框、文本域示例代码
Feb 24 Javascript
js实现的复制兼容chrome和IE
Apr 03 Javascript
关于Javascript 对象(object)的prototype
May 09 Javascript
js限制文本框只能输入整数或者带小数点的数字
Apr 27 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
Nov 17 Javascript
解决vue中虚拟dom,无法实时更新的问题
Sep 15 Javascript
微信小程序实现的canvas合成图片功能示例
May 03 Javascript
基于JavaScript实现随机点名器
Feb 25 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/09/28 PHP
PHP经典面试题之设计模式(经常遇到)
2015/10/15 PHP
适用于初学者的简易PHP文件上传类
2015/10/29 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
mapper--图片热点区域高亮组件官方站点
2007/12/22 Javascript
ajax 缓存 问题 requestheader
2010/08/01 Javascript
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
2013/01/11 Javascript
Jquery多选框互相内容交换的实例代码
2013/07/04 Javascript
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
JS中window.open全屏命令解析及使用示例
2013/12/11 Javascript
jQuery插件slider实现拖动滑块选取价格范围
2015/04/30 Javascript
javascript字符串替换函数如何一次性全部替换掉
2015/10/30 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
jQuery实现验证码功能
2017/03/17 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
JavaScript选择排序算法原理与实现方法示例
2018/08/06 Javascript
vue中接口域名配置为全局变量的实现方法
2018/09/20 Javascript
JS控制GIF图片的停止与显示
2019/10/24 Javascript
ES6对象操作实例详解
2020/05/23 Javascript
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
python ipset管理 增删白名单的方法
2019/01/14 Python
python 在指定范围内随机生成不重复的n个数实例
2019/01/28 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
Python 通过监听端口实现唯一脚本运行方式
2020/05/05 Python
基于python实现生成指定大小txt文档
2020/07/20 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
python Scrapy爬虫框架的使用
2021/01/21 Python
关于iframe跨域使用postMessage的实现
2019/10/29 HTML / CSS
学生党员公开承诺书
2014/05/28 职场文书
计算机网络专业自荐信
2014/07/04 职场文书
2014大学班主任工作总结
2014/11/08 职场文书
CSS中em的正确打开方式详解
2021/04/08 HTML / CSS