ajax跨域和js跨域解决方案

    <FONT face=""">ajax跨域和JS的跨域通信(Cross The Site)的几种解决方案

    1.什么引起了ajax跨域不能的问题

    ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,不允许js代码进行跨域操作,所以会警告。

    2.有什么完美的解决方案么?

    没有。解决方案有不少,但是只能是根据自己的实际情况来选择。

    具体情况有:

    一、本域和子域的相互访问: www.aa.com和book.aa.com

    二、本域和其他域的相互访问: www.aa.comwww.bb.com 用 iframe

    三、本域和其他域的相互访问: www.aa.comwww.bb.com 用 XMLHttpRequest访问代理

    四、本域和其他域的相互访问: www.aa.comwww.bb.com 用 JS创建动态脚本

    解决方法:

  1. 在同一域的服务器端建立一个代理,浏览器向该代理网址发送请求,然后该代理向其他域的网址发请求,在获取回复后,或作处理或按原样发回到浏览器

  2. 使用按需(On-Demand) Javascript 脚本。在页面内动态生成新的<script>,将其src属性指向别的网站的网址,这个网址返回的内容必须是合法的Javascript脚本,常用的是JSON消息。

  3. 使用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" onclick="get()"/>

    <script id="get">

    </script>

    </BODY>

    </HTML>

    http://www.zzb.bupt.cn/test.html的内容

    var result={name:'yangyun',number:12};

你可能感兴趣的:(AJAX跨域)