Javascript跨域请求的4种解决方式

 更新时间:2013年03月17日 09:55:37   作者:  
如果所请求的域名跟这个域名不致,这种情况就是跨域,由于跨域存在漏洞,所以一般来说正常的跨域请求方式是请求不到的,所以有了本文的出现,感兴趣的你可以参考下哈,希望可以帮助到你
什么情况下才会出现跨域
假设域名是:http://www.example.com.cn/
如果所请求的域名跟这个域名不致,这种情况就是跨域,由于跨域存在漏洞,所以一般来说正常的跨域请求方式是请求不到的。
解决方式
一、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.example.com.cn/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.example.com.cn/crossdomain.xml
复制代码 代码如下:

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*.another.com.cn" />
</cross-domain-policy>

相关文章

  • JavaScript中三种观察者实现案例分享

    JavaScript中三种观察者实现案例分享

    前面突然看到 Object.defineProperty,就顺道想到 Proxy,然后就想到了观察者案例,这边还没有用 javascript编写一个观察者的案例呢,顺道加入了一个 event-bus 监听事件案例,凑一起看一看不同的实现方式,需要的朋友可以参考下
    2023-08-08
  • CSS或者JS实现鼠标悬停显示另一元素

    CSS或者JS实现鼠标悬停显示另一元素

    这篇文章主要介绍了CSS或者JS实现鼠标悬停显示另一元素的相关资料,需要的朋友可以参考下
    2016-01-01
  • JS中的new Date()参数示例详解

    JS中的new Date()参数示例详解

    js中,new Date([params]),参数传递有五种方式,本文给大家讲解的非常详细,对new Date()参数相关知识感兴趣的朋友跟随小编一起看看吧
    2023-11-11
  • Javascript实现单例模式

    Javascript实现单例模式

    单例模式也称作为单子模式,更多的也叫做单体模式。为软件设计中较为简单但是最为常用的一种设计模式。这篇文章主要介绍了Javascript实现单例模式的相关资料,需要的朋友可以参考下
    2016-01-01
  • JS字符串与二进制的相互转化实例代码详解

    JS字符串与二进制的相互转化实例代码详解

    这篇文章主要介绍了JS字符串与二进制的相互转化 ,在文中给大家提到了Js之字符串和字节码之间的相互转换,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • 浅析JavaScript事件和方法

    浅析JavaScript事件和方法

    本文通过示例向大家简单分析了javascript的事件和方法,文章简洁而不简单,是篇非常不错的基础文章,这里推荐给大家。
    2015-02-02
  • JavaScript find()方法及返回数据实例

    JavaScript find()方法及返回数据实例

    这篇文章主要介绍了JavaScript中的find()方法和返回数据的内存指向,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • javascript前端埋点上报的几种方式

    javascript前端埋点上报的几种方式

    本文将介绍前端埋点上报的几种常见方式,并详细阐述如何在项目中运用这些方式进行数据上报,以帮助开发者更好地进行数据收集和分析,感兴趣的可以了解一下
    2023-11-11
  • 简单的JavaScript互斥锁分享

    简单的JavaScript互斥锁分享

    这篇文章主要介绍了简单的JavaScript互斥锁的相关资料,需要的朋友可以参考下
    2014-02-02
  • Node.js开发指南中的简单实例(mysql版)

    Node.js开发指南中的简单实例(mysql版)

    工作原因需要用到nodejs,于是找到了《node.js开发指南》这本书来看看,作者BYVoid 为清华大学计算机系的高材生,年纪竟比我还小一两岁,中华地广物博真是人才辈出,佩服
    2013-09-09

最新评论