使用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压缩工具下载集合
Mar 06 Javascript
js 页面刷新location.reload和location.replace的区别小结
Dec 24 Javascript
File, FileReader 和 Ajax 文件上传实例分析(php)
Apr 27 Javascript
javascript实现文本域写入字符时限定字数
Feb 12 Javascript
批量修改标签css样式以input标签为例
Jul 31 Javascript
详解JavaScript的回调函数
Nov 20 Javascript
Bootstrap表格和栅格分页实例详解
May 20 Javascript
分享bootstrap学习笔记心得(组件及其属性)
Jan 11 Javascript
Vue仿今日头条实例详解
Feb 06 Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
May 14 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
Aug 01 Javascript
如何在postman测试用例中实现断言过程解析
Jul 09 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模板函数 正则实现代码
2012/10/15 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
PHP7 弃用功能
2021/03/09 PHP
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
2012/12/13 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
jquery实现html页面 div 假分页有原理有代码
2014/09/06 Javascript
JavaScript实现基于十进制的四舍五入实例
2015/07/17 Javascript
实用又漂亮的BootstrapValidator表单验证插件
2016/05/30 Javascript
原生javascript实现的ajax异步封装功能示例
2016/11/03 Javascript
bootstrap输入框组件使用方法详解
2017/01/19 Javascript
js Canvas绘制圆形时钟效果
2017/02/17 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
使用ionic播放轮询广告的实现方法(必看)
2017/04/24 Javascript
angular2中Http请求原理与用法详解
2018/01/11 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
[01:00:52]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第一场
2018/04/05 DOTA
分析用Python脚本关闭文件操作的机制
2015/06/28 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
在IPython中进行Python程序执行时间的测量方法
2018/11/01 Python
python内存动态分配过程详解
2019/07/15 Python
解决TensorFlow程序无限制占用GPU的方法
2020/06/30 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
纯css3实现的竖形无限级导航
2014/12/10 HTML / CSS
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
从当地商店送来的杂货:Instacart
2018/08/19 全球购物
Nip + Fab官网:英国美容品牌
2019/08/26 全球购物
测绘工程个人的自我评价
2013/11/10 职场文书
物流司机岗位职责
2013/12/28 职场文书
企业安全生产责任书
2014/04/14 职场文书
领导干部考核评语
2015/01/04 职场文书
高校自主招生校长推荐信
2015/03/23 职场文书
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers