ajax跨域的三种方法

由于安全方面的原因,客户端js使用xmlhttprequest只能用来向来源网站发送请求,比如在www.zzsky.cn下去请求test.zzsky.cn的数据,都是不行的。不过,解决方法倒是不少,这里整理一下。

1、使用script标签。script调用没有域的限制,比如我在www.zzsky.cn下的页面需要请求test.zzsky.cn的数据,那就可以这样做:

http://www.zzsky.cn/demo/ajax-cross-domain/test1.htm代码如下:

<html>   
<body>   
<script id="test"></script>   
<input type="button" id="button" value="获取" onclick="get('http://test.zzsky.cn/demo/test.asp');">   
<script type="text/javascript">   
function get(url)    
{    
    document.getElementById("test").src=url;    
    alert(data);    
}    
</script>   
</body>   
</html>

   

http://test.zzsky.cn/demo/test.asp代码如下:

var data=123;

   

那么,我在www.zzsky.cn下的test1.htm就可以操作js变量data了。上面只是简单地说明问题,实际应用的时候,可以用json等返回数据,script也可以动态创建等等。

2、用同一个域下的服务端脚本中转。服务端脚本使用xmlhttp没有域的限制,这也算是一种方法吧,不过比较耗费服务器资源。

3、利用框架的办法。在同一个域下的各个子域之间(非完全跨域),如果设置了document.domain,那么是可以相互之间调用js的。利用这一点,可以在test.zzsky.cn下面放上一个页面,这个页面可以完成用ajax获取同一个子域test.zzsky.cn的数据,而在www.zzsky.cn下框架这个页,这样,我们就可以操纵被框架页来获取数据了。具体代码如下:

    http://zzsky.cn/demo/ajax-cross-domain/test2.htm代码如下:

<html>  
<head>  
<script type="text/javascript">  
    document.domain="zzsky.cn";   
</script>  
<body>  
<iframe src="http://test.zzsky.cn/demo/iframe.htm" id="proxy"></iframe>  
<script type="text/javascript" src="http://www.zzsky.cn/demo/ajax-cross-domain/Ajax.js"></script>  
<input type="button" id="button" value="获取" onclick="get('http://test.zzsky.cn/demo/test.asp');">  
<script type="text/javascript">  
function get(url)   
{   
      var proxy=document.getElementById("proxy").contentWindow;   
      proxy.createRequestObject(url,out)   
}   
    
function out(str)   
{   
    alert(str);   
}   
</script>  
</body>  
</html>
   

被框架页http://test.zzsky.cn/demo/iframe.htm代码如下:
[/code]<html>   
<head>   
<script type="text/javascript" src="http://www.zzsky.cn/demo/ajax-cross-domain/Ajax.js"></script>   
<script type="text/javascript">   
document.domain="zzsky.cn";    
</script>   
</head>   
<body>   
</body>   
</html>[/code]

转载于:https://my.oschina.net/pythonlord/blog/29637

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值