js跨域请求数据的3种常用的方法

前端之家收集整理的这篇文章主要介绍了js跨域请求数据的3种常用的方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

由于js同源策略的影响,当在某一域名下请求其他域名,或者同一域名,不同端口下的url时,就会变成不被允许的跨域请求。 那这个时候通常怎么解决呢,对此菜鸟光头我稍作了整理:

1.JavaScript

在原生js(没有jQuery和ajax支持)的情况下,通常客户端代码是这样的(我假设是在localhost:8080的端口下的http://localhost:8080/webs/i.mediapower.mobi/wutao/index.html页面的body标签下面加入以下代码):

var xhr = new XMLHttpRequest(); xhr.open("get","http://i2.mediapower.mobi/adpower/vm/Bora/js/test.js",true); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { console.log(xhr.responseText); } }; xhr.send(null);

保存,浏览器打开http://localhost:8080/webs/i.mediapower.mobi/wutao/index.html,并且打开console控制台:

浏览器很无情的给你弹出一个同源限制的错误,意思就是你无法跨域请求url的数据。 那么,我先采取第一种策略,运用html中的script标签,插入js脚本: (1)通过script标签引用,写死你需要的src的URL地址,比如:

var callbackfunction = function(data) { console.log('我是跨域请求来的数据-->' + data.name); };

结果和上面一样。

2.jQuery中的$.ajax()

设想,当你想要使用jQuery请求跨域数据的时候,比如(还是刚才的index.html):

浏览器还是无情的报错,因为你这个url是不同的域名下的。

那么既然jQuery封装了ajax方法,我们为何不用,人家封装好了,你不用,岂不是找罪受么,代码如下:

当你作了这么多挑逗工作之后,浏览器很爽快的给出了反应,表示它很爽,返回给了你一个对象,里面是远端不同域名下test.js中的数据。

3.postMessage+iframe

postMessage是HTML5中新增加功能,比如我在本地域名下,http://192.168.1.152:8080/webs/i.mediapower.mobi/wutao/testa.html中的testa.html中:

<Meta charset="UTF-8"> testa