<FONT face=""">ajax跨域和JS的跨域通信(Cross The Site)的几种解决方案
1.什么引起了ajax跨域不能的问题
ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,不允许js代码进行跨域操作,所以会警告。
2.有什么完美的解决方案么?
没有。解决方案有不少,但是只能是根据自己的实际情况来选择。
具体情况有:
一、本域和子域的相互访问: www.aa.com和book.aa.com
二、本域和其他域的相互访问: www.aa.com和www.bb.com 用 iframe
三、本域和其他域的相互访问: www.aa.com和www.bb.com 用 XMLHttpRequest访问代理
四、本域和其他域的相互访问: www.aa.com和www.bb.com 用 JS创建动态脚本
解决方法:
- 在同一域的服务器端建立一个代理,浏览器向该代理网址发送请求,然后该代理向其他域的网址发请求,在获取回复后,或作处理或按原样发回到浏览器
- 使用按需(On-Demand) Javascript 脚本。在页面内动态生成新的<script>,将其src属性指向别的网站的网址,这个网址返回的内容必须是合法的Javascript脚本,常用的是JSON消息。
- 使用IFRAME。在页面内嵌或动态生成指向别的网站的IFRAME,然后这2个网页间可以通过改变对方的anchor hash fragment来传输消息。改变一个网页的anchor hash fragment并不会使浏览器重新装载网页,所以一个网页的状态得以保持,而网页本身则可以通过一个计时器(timer)来察觉自己anchor hash的变化,从而相应改变自己的状态
示例:
<HTML>
<HEAD>
<script LANGUAGE="Javascript">
<!--
function get()
{
var obj = document.getElementById("get");
var s=document.createElement('SCRIPT');
s.id="get";
s.src='http://www.zzb.bupt.cn/test.html';
document.body.replaceChild(s,obj);
setTimeout('alert(result.name)',1000);
}
//-->
</script>
</HEAD>
<BODY>
<INPUT TYPE="button" value="CLICK ME" οnclick="get()"/>
<script id="get">
</script>
</BODY>
</HTML>
http://www.zzb.bupt.cn/test.html的内容:
var result={name:'yangyun',number:12};
ajax跨域和js跨域解决方案
最新推荐文章于 2021-10-13 08:22:25 发布