使用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禁制后退键(Backspace)实例代码
Nov 15 Javascript
包含中国城市的javascript对象实例
Aug 03 Javascript
jquery中表单 多选框的一种巧妙写法
Sep 06 Javascript
JS正则替换掉小括号及内容的方法
Nov 29 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
Feb 16 Javascript
详解vuelidate 对于vueJs2.0的验证解决方案
Mar 09 Javascript
详解react使用react-bootstrap当轮子造车
Aug 15 Javascript
React中使用async validator进行表单验证的实例代码
Aug 17 Javascript
配置一个vue3.0项目的完整步骤
Apr 26 Javascript
微信小程序实现卡片层叠滑动效果
Jun 21 Javascript
JS实现滑动插件
Jan 15 Javascript
vue 使用post/get 下载导出文件操作
Aug 07 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+MySQL5.0中文乱码解决方法
2006/11/20 PHP
mysql中存储过程、函数的一些问题
2007/02/14 PHP
php 获取一个月第一天与最后一天的代码
2010/05/16 PHP
PHP中使用crypt()实现用户身份验证的代码
2012/09/05 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
PHP实现简易blog的制作
2016/10/24 PHP
PHP实现简单的模板引擎功能示例
2017/09/02 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
js类中的公有变量和私有变量
2008/07/24 Javascript
避免回车键导致的页面无意义刷新的解决方法
2011/04/12 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
jquery 合并内容相同的单元格(示例代码)
2013/12/13 Javascript
JS父页面与子页面相互传值方法
2014/03/05 Javascript
confirm的用法示例用于按钮操作时确定是否执行
2014/06/19 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
2015/04/07 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
Bootstrap源码解读表单(2)
2016/12/22 Javascript
Vue完整项目构建(进阶篇)
2018/02/10 Javascript
Vue初始化中的选项合并之initInternalComponent详解
2020/06/11 Javascript
[08:47]DOTA2每周TOP10 精彩击杀集锦vol.6
2014/06/25 DOTA
python使用rabbitmq实现网络爬虫示例
2014/02/20 Python
Python读取指定目录下指定后缀文件并保存为docx
2017/04/23 Python
python3.6连接mysql数据库及增删改查操作详解
2020/02/10 Python
解决django FileFIELD的编码问题
2020/03/30 Python
Python抓包并解析json爬虫的完整实例代码
2020/11/03 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
计算机专业推荐信范文
2013/11/20 职场文书
学生党员思想汇报范文
2014/01/09 职场文书
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
2014统计局民主生活会对照检查材料思想汇报
2014/10/02 职场文书
2015年上半年计生工作总结
2015/03/30 职场文书
初中同学会致辞
2015/08/01 职场文书
Mysql数据库按时间点恢复实战记录
2021/06/30 MySQL
python数据可视化使用pyfinance分析证券收益示例详解
2021/11/20 Python