ajax跨域解决方案

先看看域名组成:     

http:// www.baidu.com  :80   /abc/123 ?id=12
【协议】 【地址】 【端口】 【文件】 【参数】

 

 


我们再来看看何时才算跨域:

当协议或者地址或者端口号不同的时候才算是不同的,而当你在不同的域之间有数据传递的时候,叫做跨域。


看到这里你还不理解什么叫跨域的话,那就来看看发生跨域的情况

url 说明 是否跨域

http://www.baidu.com

https://www.baidu.com

不同协议

http://www.baidu.com

http://www.163.com

不同地址

http://www.baidu.com:80

http://www.baidu.com:8080

不同端口

http://www.baidu.com/a.js

http://192.168.0.122/a.js

域名对应的ip地址

http://www.baidu.com/abc/a.php

http://www.baidu.com/123/a.php

 同一域名不同文件/文件夹  否

知道跨域何时发生了,有时业务需要,要用到跨域,这个时候就会有问题了。ajax不是不能跨域吗?那我们就是要想办法使其能跨域!!

方法1——使用代理:

这种方式是通过后台(ASP、PHP、JAVA、ASP.NET)获取其他域名下的内容,然后再把获得内容返回到前端,这样因为在同一个域名下,所以就不会出现跨域的问题。

方法2——JSONP:

假设在http://www.a.com/index.php这个页面中向http://www.b.com/getinfo.php提交GET请求,那么我们在www.a.com页面中添加如下代码:

//创建一个script元素

var  Scr = document.reateElement('script');

//声明类型

Scr.type='text/javascript';

//添加src属性,引入跨域访问的url

Scr.src='http://www.b.com/gerinfo.php';

//在页面中添加新创建的script元素

document.getElementsByTagName('head')[0].appendChild(Scr)

当GET请求从http://www.b.com/getinfo.php返回时,可以返回一段JavaScript代码,这段代码会自动执行,可以用来负责调用http://www.a.com/index.php页面中的一个callback函数。看下面一个列子:

www.b.com页面中:

<script>

  alert('hello  我是b');

</script>

注意:JSONP只支持 “GET” 请求,但不支持 “POST” 请求。

方法3——XHR2

“XHR2” 全称 “XMLHttpRequest Level2” 是HTML5提供的方法,对跨域访问提供了很好的支持,并且还有一些新的功能。

* IE10以下的版本都不支持

* 只需要在服务器端头部加上下面两句代码:

header( "Access-Control-Allow-Origin:*" );

header( "Access-Control-Allow-Methods:POST,GET" );

posted @ 2017-09-11 18:06  imthirsty  阅读(121)  评论(0编辑  收藏  举报