使用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 - 如何引入js代码
Mar 09 Javascript
如何用js控制css中的float的代码
Aug 16 Javascript
js仿微信公众平台打标签功能
Apr 08 Javascript
Vue代码分割懒加载的实现方法
Nov 23 Javascript
JavaScript实现美化滑块效果
May 17 Javascript
解决layer图标icon不加载的问题
Sep 04 Javascript
webpack3升级到webpack4遇到问题总结
Sep 30 Javascript
微信小程序网络请求实现过程解析
Nov 06 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
Nov 07 Javascript
使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法
May 14 Javascript
vue中el-input绑定键盘按键(按键修饰符)
Jul 22 Javascript
JavaScript Dom实现轮播图原理和实例
Feb 19 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
Mysql和网页显示乱码解决方法集锦
2008/03/27 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
Dom与浏览器兼容性说明
2010/10/25 Javascript
JavaScript 放大镜 放大倍率和视窗尺寸
2011/05/09 Javascript
IE6下javasc#ipt:void(0) 无效的解决方法
2013/12/23 Javascript
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
2016/12/15 Javascript
vue2.0结合Element实现select动态控制input禁用实例
2017/05/12 Javascript
vuejs简单验证码功能完整示例
2019/01/08 Javascript
js实现菜单跳转效果
2020/12/11 Javascript
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
Python多线程结合队列下载百度音乐的方法
2015/07/27 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
Django数据库连接丢失问题的解决方法
2018/12/29 Python
解决django同步数据库的时候app models表没有成功创建的问题
2019/08/09 Python
Pytorch 实现自定义参数层的例子
2019/08/17 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
2019/11/15 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
Farfetch香港官网:汇集全球时尚奢侈品购物平台
2017/11/26 全球购物
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
什么是测试驱动开发(TDD)
2012/02/15 面试题
一道输出判断型Java面试题
2014/10/01 面试题
幼儿园大班毕业感言
2014/02/06 职场文书
《理想》教学反思
2014/02/17 职场文书
生物制药专业求职信
2014/03/11 职场文书
岗位标兵事迹材料
2014/05/17 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
2016年党建工作简报
2015/11/26 职场文书
浅谈Python numpy创建空数组的问题
2021/05/25 Python
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL