- 浏览: 2159138 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (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 1534问题:使用knockoutjs的过程中,有时候会发现一些奇怪的 ... -
CSS link、@import、media type、media query
2012-08-22 10:42 1931CSS link、@import共同点:都是为了加载CSS文件 ... -
IE兼容模式及客户端兼容模式、服务器端兼容模式设置
2012-08-20 16:24 12849IE兼容模式: 为了帮助 ... -
IE 条件注释(转)
2012-08-20 14:20 935一、条件注释简介 IE中的条件注释(Conditional ... -
Css样式覆盖顺序
2012-08-13 16:34 52201,css样式选择器的优先级为:“元素上的style” &g ... -
Javascript Closures闭包、为什么要闭包(闭包作用)、变量作用域
2012-08-10 14:00 2118转自:http://www.jb51.net/article/ ... -
Javascript函数、变量的初始化顺序、Javascript上下文环境
2012-08-07 15:57 1850参考:Initialization of functions ... -
Javascript函数:函数声明、函数表达式、NFE被命名的函数表达式
2012-08-07 15:45 1182参考: functions-declaration ... -
css属性 :after :before content css伪元素
2012-08-01 15:47 2111:after:伪元素在元素之后添加内容。 这个伪元素允许创作人 ... -
CSS3 圆角属性border-radius、边框阴影属性box-shadow、文字阴影text-shadow、文本裁剪省略text-overflow
2012-07-31 15:37 10219相关CSS圆角属性: border-radius:CSS3标准 ... -
Javascript alert object、JavaScript版本迷局
2012-07-30 15:18 24671,使用alert(object.toSource()) 注 ... -
onblur后下一个获取焦点的控件判断、html当前活跃控件、jquery版本查看、jquery查看浏览器版本、setTimeout&setInterval
2012-07-13 15:20 7278需求: input控件在失去 ... -
html中label宽度设置、非替换元素和替换元素
2012-07-05 09:02 12311<label style="float:l ... -
css属性 background
2012-06-21 14:12 920参考:http://www.w3school.com.cn/c ... -
css属性 list-style 纵向菜单、横向菜单
2012-06-20 09:49 6675参考:ul li css 做横向菜 ... -
css属性 text-decoration outline clear overflow text-indent
2012-06-20 09:02 1164参考:http://www.w3school.co ... -
pageX, pageY, screenX, screenY, clientX, clientY
2012-06-18 11:03 1532pageX, pageY, screenX, screenY, ... -
css position, display, float 内联元素、块级元素
2012-06-18 10:16 5868参考:jQuery offset,positi ... -
jQuery offset,position,offsetParent,scrollLeft,scrollTop html控件定位 css position属
2012-06-16 10:17 9337定位应用:点击一个按钮,然后在按钮的右边弹出一个提示框 1,提 ... -
knockoutjs -- if 绑定
2012-06-14 16:22 13027参考:http://knockoutjs.com/ ...
相关推荐
使用History API,开发者可以在不进行页面刷新的情况下改变浏览器地址栏中的URL,这包括使用history.pushState和history.replaceState方法。 #### history.pushState 该方法接受三个参数:state对象、标题(目前...
2. **平滑导航**:在页面内部切换时,插件可能会使用pushState来改变URL,同时通过AJAX请求加载新内容,实现平滑无刷新的过渡效果。 3. **回退处理**:当用户点击浏览器的后退按钮时,插件会监听popstate事件,恢复...
* pjax技术:基于ajax+history.pushState的新技术,可以无刷新改变页面的内容,并且可以改变页面的URL。 五、浏览器兼容性 | Feature | Chrome | Firefox(Gecko) | Internet Explorer | Opera | Safari | | --- | ...
`history`对象提供了`pushState()`和`replaceState()`两个方法,它们允许开发者在不刷新页面的情况下修改浏览器的历史记录。这两个方法接受三个参数:状态对象(state)、标题(title)和URL(url)。 1. `history....
history.pushState({query: data}, '', url); // 触发AJAX请求 }); }); ``` 3. **监听`onpopstate`事件**: - 当用户使用前进或后退按钮时,根据历史记录条目的数据执行相应的AJAX请求。 ```javascript ...
使用pushState和replaceState方法时,浏览器并不会立即加载对应的URL,而是更新地址栏中的URL,这意味着开发者可以使用这些方法来创建一种伪URL,从而不触发页面加载。在单页面应用中,这可以用来模拟页面的导航。 ...
pushState是HTML5提供的一种技术,它允许我们改变浏览器地址栏中的URL而不重新加载页面,这种技术常被用来实现单页应用(SPA)中的无刷新页面切换。通过pushState与window.onpopstate事件的组合,可以实现页面的前进...
history.pushState 和 history.replaceState 可以在不刷新当前页面的情况下更改URL,但是这样就无法获取通过AJAX得到的新页面的内容了。 虽然各种HTML5文档说 [removed] 事件可以拦截 pushState 的消息,但在实际的...
`window.history.pushState(state, title, url)` 方法允许我们在不实际加载新页面的情况下,将新的历史记录条目添加到浏览器的当前会话历史中。参数含义如下: - `state`:一个JavaScript对象,用于存储与新历史...
需要注意的是,`history.pushState`和`history.replaceState`改变URL时,新URL必须与当前页面同源,否则浏览器会抛出安全错误。此外,`window.onpopstate`事件通常只在用户通过浏览器的前进/后退按钮或JavaScript的`...
为了解决这个问题,可以使用 `history.pushState()` 或 `history.replaceState()` 方法实现URL变化,同时利用 `onpopstate` 事件来处理回退按钮。 **6. JSONP(JSON with Padding)** JSONP 是一种跨域数据获取的...
使用AJAX分页,可以避免整个页面的刷新,从而提升用户体验。然而,在传统的AJAX分页实现方式中,页面的URL不会发生变化,导致用户如果点击浏览器的后退按钮,无法返回到前一页分页数据的准确状态。为了解决这个问题...
4. **使用History API**:HTML5的History API允许开发者在不刷新页面的情况下改变浏览器的历史记录。通过调用`history.pushState()`或`history.replaceState()`,可以在用户点击后退按钮时执行清理会话的逻辑。 5. ...
比如,通过`addEventListener`监听用户交互,用`fetch`或`XMLHttpRequest`进行异步数据获取,利用`history.pushState`和`window.onpopstate`实现前端路由,或者使用第三方库如jQuery、Vue.js、React等提升开发效率和...
`window.history.pushState/replaceState`用于无刷新更改浏览器历史记录,实现前端路由。 5. **AJAX与链接**:使用`fetch`或`XMLHttpRequest`发送异步请求,可以在不刷新页面的情况下获取和更新数据。结合`...
5. **历史API**:如果项目中包含了前进/后退按钮功能,可能利用到了浏览器的历史API(`history.pushState`、`history.replaceState`和`window.onpopstate`)来管理浏览历史记录。 6. **AJAX请求**:如果打字机应用...
但要注意,`onpopstate`仅在使用`pushState`或`replaceState`(HTML5 History API的一部分)改变页面状态时才有效。如果只是简单地跳转页面,可能需要结合其他方法,如设置会话存储或Cookie来检测后退操作。 另一种...