Javascript跨域请求有哪些实现方法

发布时间:2021-01-10编辑:脚本学堂
为大家介绍javascript实现跨域请求的多种方式,有需要的朋友,可以参考学习下。

假设域名是:http://www.jb200.com/
如果所请求的域名跟这个域名不致,这种情况就是跨域,由于跨域存在漏洞,所以一般来说正常的跨域请求方式是请求不到的。
 
解决方式:
一、window.name
1、 服务器返回
 

复制代码 代码示例:
<script>window.name='{"id":"3", "name":"leisure"}';</script>

2、定义一个iframe,添加onload事件 <iframe id="iframe1" onload="iLoad"><iframe>
 

复制代码 代码示例:
<script type="text/javascript">
var load = false;
    function iLoad() {
if(load == false) {
    // 同域处理,请求后会再次重新加载iframe
    document.getElementById('iframe1').contentWindow.location = '/';
    load = true;
} else {
    // 获取window.name的内容,注意必须进行同域处理后方可访问!
    var data = document.getElementById('iframe1').contentWindow.name;
    alert(data);  // {"id":"3", "name":"leisure"}
    load = false;
}
}
    </script>

3、定义一个form,设置form的target为iframe的id,然后提交form

复制代码 代码示例:
  <form  action="url" method="POST" target="iframe1">
  <button type="submit" value="submit" />
    </form>

二、JSONP
服务器返回

复制代码 代码示例:
callback({"id": "3", "name": "leisure"});
<script type="text/javascript">
function callback(data) {
    alert(data);
}
</script>
<script type="text/javascript" src="http://www.jb200.com/product.jsp?id=5&jsonp=callback"></script>

三、jquery.getJSON
服务器返回 json格式数据 test({"id": "3", "name": "leisure"}); test函数名为callback参数中定义

复制代码 代码示例:
$.getJSON(url + "?callback=?", data, function(data) {
}

注意,callback=?这个参数必须带上,jquery会自动生成一个函数名替换这个问号!jQuery.getJSON实际上是用了JSONP方式实现。
 
四、flash跨域
服务器添加crossdomain.xml

复制代码 代码示例:
http://www.jb200.com/crossdomain.xml
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*.another.com.cn" />
</cross-domain-policy>