- 浏览: 2139850 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (401)
- Agile (16)
- Apache Commons (3)
- Architecture (8)
- DB.MongoDB (5)
- DB.Mysql (3)
- DB.Oracle (34)
- DirectoryService (1)
- DotNet (1)
- English (3)
- Groovy (0)
- Html (28)
- Java (67)
- Java.Aixs (7)
- Java.Cache (2)
- Java.jPBM (1)
- Java.Resin (6)
- Java.Spring (4)
- Java.Struts2 (5)
- Java.Tomcat (16)
- Javascript (45)
- Javascript.Google Map (2)
- Javascript.Jquery (8)
- Life (15)
- Maven&Ant (4)
- Network (5)
- OS.Linux (45)
- OS.Windows (10)
- OS.Windows.Office (1)
- PlayFramework (15)
- Python (28)
- Reading notes (11)
- Security (13)
- Server.Apache (3)
- Server.Nginx (7)
- Test (6)
- Tool (15)
- Work.Solution (15)
- Other (20)
- SSO&CAS&Identity (13)
最新评论
-
hutuxiansheng123:
防火墙、Iptables、netfilter/iptables、NAT 概述 -
dacoolbaby:
非常棒的正则表达式,非常适用。万分感谢。
用python分析nginx的access日志 -
loot00:
您好! 我也遇到了相同的错误信息。我是用f_link_lob ...
LOB variable no longer valid after subsequent fetch -
feihangchen:
@OnApplicationStop public clas ...
Play framework 1.2.3 Jobs定时任务、异步任务、引导任务、触发任务、关闭任务 -
洞渊龙王:
谢谢了
www.w3.org被qiang导致logback报错:Connect reset
var htmlData1 = $.ajax( { url: "/getXXXResponse", async: false }).responseText;
转自:使用ajax和history.pushState无刷新改变页面URL
jQuery-Pjax(pushState and Ajax):pjax采用pushState和Ajax, 不需要重新加载整个页面就能从服务器加载Html到你当前页面,这个ajax请求会有永久链接,title并支持浏览器的回退按钮。采用pjax技术,用户不能区分pjax page loads和normal page loads, 总体来说,你会觉得访问更加快速了。
在访问现在很火的google plus时,细心的用户也许会发现页面之间的点击是通过ajax异步请求的,同时页面的URL发生了了改变。并且能够很好的支持浏览器的前进和后退。不禁让人想问,是什么有这么强大的功能呢?
HTML5里引用了新的API,就是history.pushState和history.replaceState,就是通过这个接口做到无刷新改变页面URL的。
与传统的AJAX的区别
传统的ajax有如下的问题:
虽然ajax可以无刷新改变页面内容,但无法改变页面URL
其次为了更好的可访问性,内容发生改变后,改变URL的hash。但是hash的方式不能很好的处理浏览器的前进、后退等问题。location.hash的方式的回退,前进 好像就IE6,7不支持,其他主流浏览器都支持,没有验证过!
有的浏览器引入了onhashchange的接口,不支持的浏览器只能定时去判断hash是否改变
再有,ajax的使用对搜索引擎很不友好,往往蜘蛛爬到的区域是空的
location是javascript里边管理地址栏的内置对象,比如location.href就管理页面的url,用location.href=url就可以直接将页面重定向url。一个完整的URL地址的格式为:协议://主机:端口/路径名称#hash标识?搜索条件,
而location.hash则可以用来获取或设置页面的标签值。比如http://domain/#admin?a=1的location.hash="#admin?a=1"。
onhashchange在#后面的url发生变化时触发
为了解决传统ajax带来的问题,HTML5里引入了新的API,即:history.pushState, history.replaceState。可以通过pushState和replaceState接口操作浏览器历史,并且改变当前页面的URL。pushState是将指定的URL添加到浏览器历史里,replaceState是将指定的URL替换当前的URL。
var state = { title: title, url: options.url, otherkey: othervalue }; window.history.pushState(state, document.title, url);
state对象除了要title和url之外,也可以添加其他的数据,比如:还想将一些发送ajax的配置给保存起来。
replaceState和pushState是相似的,不需要多做解释。
如何响应浏览器的前进、后退操作
window对象上提供了onpopstate事件,上面传递的state对象会成为event的子对象,这样就可以拿到存储的title和URL了。
window.addEventListener('popstate', function(e){ if (history.state){ var state = e.state; //do something(state.url, state.title); } }, false);
这样就可以结合ajax和pushState完美的进行无刷新浏览了。
一些限制
1、无法跨域,这个是必然的。引用曾经在网上看到的一句经典的话:“如果javascript可以跨域的话,那他就可以逆天了!”
2、state对象虽然可以存储很多自定义的属性,但值不能是个对象。
对应后端的一些处理
这种模式下除了当前使用ajax可以无刷新浏览外,还要保证直接请求改变的URL后也可以正常浏览,所以后端要对这些处理下。
1、对结合pushState的ajax可以发送一个特殊的头,如: setRequestHeader(‘PJAX’, ‘true’)。
2、后端获取到有PJAX=true的header时,将页面中通用的部分都不输出。比如:PHP可以通过下面的判断
function is_pjax(){ return array_key_exists('HTTP_X_PJAX', $_SERVER) && $_SERVER['HTTP_X_PJAX'] === 'true'; }
发表评论
-
knockoutjs 变量引用方式、怪异问题排查
2012-08-24 15:01 1489问题:使用knockoutjs的过程中,有时候会发现一些奇怪的 ... -
CSS link、@import、media type、media query
2012-08-22 10:42 1876CSS link、@import共同点:都是为了加载CSS文件 ... -
IE兼容模式及客户端兼容模式、服务器端兼容模式设置
2012-08-20 16:24 12811IE兼容模式: 为了帮助 ... -
IE 条件注释(转)
2012-08-20 14:20 895一、条件注释简介 IE中的条件注释(Conditional ... -
Css样式覆盖顺序
2012-08-13 16:34 51851,css样式选择器的优先级为:“元素上的style” &g ... -
Javascript Closures闭包、为什么要闭包(闭包作用)、变量作用域
2012-08-10 14:00 2079转自:http://www.jb51.net/article/ ... -
Javascript函数、变量的初始化顺序、Javascript上下文环境
2012-08-07 15:57 1816参考:Initialization of functions ... -
Javascript函数:函数声明、函数表达式、NFE被命名的函数表达式
2012-08-07 15:45 1138参考: functions-declaration ... -
css属性 :after :before content css伪元素
2012-08-01 15:47 2075:after:伪元素在元素之后添加内容。 这个伪元素允许创作人 ... -
CSS3 圆角属性border-radius、边框阴影属性box-shadow、文字阴影text-shadow、文本裁剪省略text-overflow
2012-07-31 15:37 10186相关CSS圆角属性: border-radius:CSS3标准 ... -
Javascript alert object、JavaScript版本迷局
2012-07-30 15:18 24261,使用alert(object.toSource()) 注 ... -
onblur后下一个获取焦点的控件判断、html当前活跃控件、jquery版本查看、jquery查看浏览器版本、setTimeout&setInterval
2012-07-13 15:20 7241需求: input控件在失去 ... -
html中label宽度设置、非替换元素和替换元素
2012-07-05 09:02 12236<label style="float:l ... -
css属性 background
2012-06-21 14:12 877参考:http://www.w3school.com.cn/c ... -
css属性 list-style 纵向菜单、横向菜单
2012-06-20 09:49 6627参考:ul li css 做横向菜 ... -
css属性 text-decoration outline clear overflow text-indent
2012-06-20 09:02 1117参考:http://www.w3school.co ... -
pageX, pageY, screenX, screenY, clientX, clientY
2012-06-18 11:03 1487pageX, pageY, screenX, screenY, ... -
css position, display, float 内联元素、块级元素
2012-06-18 10:16 5812参考:jQuery offset,positi ... -
jQuery offset,position,offsetParent,scrollLeft,scrollTop html控件定位 css position属
2012-06-16 10:17 9290定位应用:点击一个按钮,然后在按钮的右边弹出一个提示框 1,提 ... -
knockoutjs -- if 绑定
2012-06-14 16:22 12995参考:http://knockoutjs.com/ ...
相关推荐
主要介绍了pushState、replaceState、onpopstate 实现Ajax页面的前进后退刷新的相关资料,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
解决方案:通过history.pushState添加历史记录名目,history.onpopstate监听历史记录条目发生变化时,调用小程序APIwx.navigateBack window.addEventListener('popstate', (event) => { wx.miniProgram....
history.pushState 和 history.replaceState 可以在不刷新当前页面的情况下更改URL,但是这样就无法获取通过AJAX得到的新页面的内容了。 虽然各种HTML5文档说 [removed] 事件可以拦截 pushState 的消息,但在实际的...
尽管History.js是目前最受欢迎JavaScript库之一,并且在当时已被数百万用户的公司使用-经济和公司实践的现实似乎是公司更喜欢使用自己的内部版本并在本地与自己的开发人员一起解决问题,而不是向开源维护者提供资金...
history.pushState(state, title, url); history.replaceState(state, title, url); onpopstate 会监听 go()/back()/forward()操作 [removed] = function(){} // 监听hash值改变,可以通过location.hash 获取或设置...
HTML5 历史 API 管理器现代浏览器支持使用 JavaScript 更新浏览器 URL 并将状态数据与更新后的 URL 关联的功能。 此实用程序旨在满足本机 API 中...用法// 通过传入要在调用 History.pushState 方法和 onpopstate 事件
背景:项目中有一个场景要监听android手机物理返回键,但是app和js的中间件又没提供这个事件的监听,只能百度纯js实现了 第一步: xback.js ... history.pushState(state, null, location.href); }
mobile-router.js 是轻量级web端单... 优势: 使用简单、方便、轻量,基于 history、window.onpopstate。 支持路由视图嵌套 (1.5.0 )。 无依赖,可与其他框架(库)搭配自由使用,例如:jquery, zepto, iscroll等。
所有导航都已完成,无需刷新即可更改浏览器 URL 页面(HTML5 “onpopstate”事件),页面内容用Javascript显示。 页面首次加载时访问 我们得到一个包含所有声音数据(声音标题、描述、uri...)的 JSON, 我们将...
当用户交互改变默认状态时,Javascript 函数使用History API将当前快照保存到浏览器历史History API 。 然后它调用 PHP 脚本来更新$_SESSION变量中的当前状态并重新加载页面。 例如,Javascript 文件还会侦听...