location的hash部分和使用window.onhashchange实现ajax请求内容时使用浏览器后退和前进功能-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

location的hash部分和使用window.onhashchange实现ajax请求内容时使用浏览器后退和前进功能

简介:

在js跨域双向数据传递时可以用iframe加上location.hash来实现,在研究这个的时候深入学习了一下hash的特性。

  hash就是uri中#及后面的部分,例如:www.google.com.hk#123的#123。当只有hash部分发生变化时,浏览器的历史记录会产生记录,但不会向服务器发出请求,这时按后退键地址栏的uri会变化但页面内容不变。

  而hash变化但不发出请求就是js跨域双向数据传递的基础啦。

  下面就讲述一下hash结合ajax的使用,ajax每次取数据时页面更新后浏览器并不产生历史记录,也就是说后退和前进按钮失去应用的效用,这时可以结 合hash和window.onhashchange来使用,注意ie6、7均不支持onhashchange,但可以用setInterval定期检查 hash的改变,或者onload中检查的方法。

  具体实现:

<body>
   
    <div id="div1"></div>
    <input type="button" value="click" onclick="GetT()" /> 

</body>
</html>
<script type="text/javascript" src="js/AjaxHasPool.js">
</script>
<script type="text/javascript">
var ajax = new AjaxHasPool();
var method="get";
var url ="Handler.ashx";
var i = 1;
var obj = new Object();
function GetT()
{
    document.getElementById("div1").innerHTML=i; 
    ajax.Startup(null,url,method,ep);
}
function ep(xmlobj){
   eval("obj['"+i+"']="+i+";");
   location.hash="#"+i;
++i; 
}

window.onhashchange=function(){
var hashStr = location.hash.replace("#","");
if(typeof(eval("obj['"+hashStr+"']"))!="undefined") 
         document.getElementById("div1").innerHTML=eval("obj['"+hashStr+"']"); 
}
</script>
1.AjaxHasPool是自己封装的ajax类,其中的ajax.Startup()就是发送ajax请求;
2.Object对象保存历史记录,如果对象属性为数字的话,要用obj["1"]的方式来实例化,否者会违反命名规范。

3.在使用window.onhashchange检测hash值获取历史数据。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: