在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值获取历史数据。

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

  1. ajax请求成功后打开新开窗口(window.open())被拦截的解决方法

    问题:今天在做项目时需要在ajax请求成功后打开一个新的窗口,此时遇到浏览拦截了新窗口的问题,尝试在ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('clic ...

  2. ajax请求 拦截窗口,ajax请求成功后新开窗口window.open()被拦截解决方法

    ajax请求成功后新开窗口window.open()被拦截解决方法 问题: 前面开发项目时碰到一个问题,ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但 ...

  3. ajax请求成功后location.href没有跳转

    错误原因: 注意起来一个情况:ajax+submit+同步--就是你用ajax请求服务器,而且用的是同步的方式,并且你是通过点击了type类型为submit的按钮来触发这个ajax. 这个时候,首先你 ...

  4. window.print()打印网页局部内容

    用window.print()打印网页局部内容 今天客户让添加个打印证照功能,直接用window.print()打印的是整个页面,而用以下方法就可以只打印证明了 <!--window.print ...

  5. window.print()实现打印指定内容——功能实现

    最近在做后台管理系统时,需要实现一个打印功能,打印的内容为页面上指定的dom.此时可以通过window.print()功能来实现: html部分 <button @@click="pr ...

  6. chrome jquery ajax请求,在Chrome中window.onbeforeunload ajax请求

    慕姐4208626 这与较新版本的Chrome有关.就像@Garry English 所说的那样,async在页面期间发送请求onunload将不起作用,因为浏览器会在发送请求之前终止线程.发送syn ...

  7. window.navigator.userAgent用来区分设备和浏览器

    javascript的navigator对象 navigator为Window对象的一个属性,指向了一个包含浏览器相关信息的对象.navigatot中包含了一些常用到的属性,如 navigator.a ...

  8. 关于 window.open() referer 非法请求的问题

    最近开发页面遇到需求需要跳转到第三方的页面,一般的页面window.open都能打开,但是一些页面报referer 非法请求. 问题原因是:服务端通过获取请求头中的referrer,来判断是否是非法链 ...

  9. window.print()打印指定页面内容

    在做开发中,我们可能会遇到实现打印的功能,下面给出HTML DOM print() 方法 bdhtml=window.document.body.innerHTML;//获取当前页的html代码 sp ...

最新文章

  1. 基于机器学习梯度下降优化算法来寻找最佳的线性回归模型
  2. 本田、大众宣布智能路口研究新进展 以安全为重点
  3. 关于欧拉工程的一道递推题
  4. github的一些简单用法
  5. jquery --- 网页选项卡
  6. mysql自动插入的时间不对 差8小时
  7. oracle多条sql语句常量,如何在Oracle中一次执行多条sql语句
  8. 小程序开发(2)-之app.js、app.wxss、project.config.json说明
  9. jsp 中select 下拉选择框 el 三元运算符 如何选中与不选中
  10. python多进程之间的通信:消息队列Queue
  11. 推荐模块︱apple.Turicreate个性化推荐recommender(五)
  12. Eclipse Code Template 设置自动加注释
  13. AD10封装库转到PADS封装库里
  14. 阿甘正传中的人生哲理
  15. 钉钉属于计算机服务吗,钉钉可以远程控制电脑吗
  16. 换成Everyone还是访问被拒绝的解决办法
  17. [小把戏] 之IBatis.Net系统分页问题的解决
  18. cv1378 选课(树)
  19. Ps 的模板文件格式 PSDT
  20. win7麦克风没声音怎么设置

热门文章

  1. android.util.Base64 和 org.apache.commons.codec.binary.Base64
  2. 想念一个人是一种温馨,被别人想念是一种幸福
  3. 只运行一个实例的写法
  4. Java step by step(3): Annotation
  5. 解决MSChart底部横坐标显示不全的问题
  6. 最大化BEA WebLogic Cluster的性能、可用性和安全
  7. KP-ABE基于属性的加密加解密算法及Access Tree构建
  8. Windows 95被做成了一款软件,可玩扫雷和纸牌
  9. 创业者ALL IN区块链的5条建议
  10. makefile之引用(3)