使用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 相关文章推荐
jQuery操作Select的Option上下移动及移除添加等等
Nov 18 Javascript
js与jQuery 获取父窗、子窗的iframe
Dec 20 Javascript
基于jquery和svg实现超炫酷的动画特效
Dec 09 Javascript
jQuery实现监控页面所有ajax请求的方法
Dec 10 Javascript
AngularJS中关于ng-class指令的几种实现方式详解
Sep 17 Javascript
jquery自定义表单验证插件
Oct 12 Javascript
jquery删除数组中重复元素
Dec 05 Javascript
解决vue多个路由共用一个页面的问题
Mar 12 Javascript
Angular(5.2-&gt;6.1)升级小结
Dec 27 Javascript
vue配置接口域名方法总结
May 12 Javascript
javascript实现移动端触屏拖拽功能
Jul 29 Javascript
Vue 同步异步存值取值实现案例
Aug 05 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使用GD2绘制几何图形示例
2017/02/15 PHP
php str_replace替换指定次数的方法详解
2017/05/05 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
解决laravel5.4下的group by报错的问题
2019/10/16 PHP
JQuery 拾色器插件发布-jquery.icolor.js
2010/10/20 Javascript
jquery mobile changepage的三种传参方法介绍
2013/09/13 Javascript
使用indexOf等在JavaScript的数组中进行元素查找和替换
2013/09/18 Javascript
JS常用字符串处理方法应用总结
2014/05/22 Javascript
教你用jquery实现iframe自适应高度
2014/06/11 Javascript
JavaScript实现的圆形浮动标签云效果实例
2015/08/06 Javascript
AngularJS实现Model缓存的方式
2016/02/03 Javascript
Angular.JS中的指令引用template与指令当做属性详解
2017/03/30 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
2017/06/19 Javascript
vue里如何主动销毁keep-alive缓存的组件
2019/03/21 Javascript
详解vue在项目中使用百度地图
2019/03/26 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
javascript for循环性能测试示例
2019/08/07 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
[43:35]EG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python实现的简单猜数字游戏
2015/04/04 Python
解决python3 urllib中urlopen报错的问题
2017/03/25 Python
Python入门学习指南分享
2018/04/11 Python
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
python使用turtle库绘制时钟
2020/03/25 Python
对python requests的content和text方法的区别详解
2018/10/11 Python
Flask框架工厂函数用法实例分析
2019/05/25 Python
python实现感知机线性分类模型示例代码
2019/06/02 Python
python接入支付宝的实例操作
2020/07/20 Python
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
2014/04/10 HTML / CSS
函数指针的定义是什么
2016/08/14 面试题
如何将无状态会话Bean发布为WEB服务,只有无状态会话Bean可以发布为WEB服务?
2015/12/03 面试题
初任培训自我鉴定
2013/10/07 职场文书
就业协议书样本
2014/08/20 职场文书
党委班子纠正“四风”问题整改措施
2014/10/28 职场文书
辞职信的写法
2015/02/27 职场文书
2015年人力资源部工作总结
2015/04/30 职场文书