使用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 相关文章推荐
发一个自己用JS写的实用看图工具实现代码
Jul 26 Javascript
js或css文件后面跟参数的原因说明
Jan 09 Javascript
JQuery页面的表格数据的增加与分页的实现
Dec 10 Javascript
详谈JavaScript 匿名函数及闭包
Nov 14 Javascript
jQuery根据用户电脑是mac还是pc加载对应样式的方法
Jun 26 Javascript
js 获取范围内的随机数实例代码
Aug 02 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
Dec 07 Javascript
javascript过滤数组重复元素的实现方法
May 03 Javascript
jquery replace方法去空格
May 08 jQuery
浅谈angular.js跨域post解决方案
Aug 30 Javascript
vue组件中使用iframe元素的示例代码
Dec 13 Javascript
js+canvas实现转盘效果(两个版本)
Sep 13 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的SQL注入过程分析
2012/01/06 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
2016/07/07 PHP
mac系统下安装多个php并自由切换的方法详解
2017/04/21 PHP
Laravel框架Eloquent ORM删除数据操作示例
2019/12/03 PHP
实现连缀调用的map方法(prototype)
2009/08/05 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
2013/08/30 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
深入讲解AngularJS中的自定义指令的使用
2015/06/18 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
2016/01/27 Javascript
浅析jQuery Ajax通用js封装
2016/06/22 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
2016/11/29 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
微信小程序 实现点击添加移除class
2017/06/12 Javascript
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
2017/07/08 jQuery
10个在JavaScript开发中常遇到的BUG
2017/12/18 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
使用apifm-wxapi模块中的问题及解决方法
2019/08/05 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
分析用Python脚本关闭文件操作的机制
2015/06/28 Python
Python中列表元素转为数字的方法分析
2016/06/14 Python
微信 用脚本查看是否被微信好友删除
2016/10/28 Python
python构建基础的爬虫教学
2018/12/23 Python
python 字典操作提取key,value的方法
2019/06/26 Python
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
韩国保养品、日本药妆购物网:小三美日
2018/12/30 全球购物
列车长先进事迹材料
2014/01/25 职场文书
竞争上岗实施方案
2014/03/21 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书
解决Jupyter-notebook不弹出默认浏览器的问题
2021/03/30 Python
Mysql基础知识点汇总
2021/05/26 MySQL
Python list列表删除元素的4种方法
2021/11/01 Python