ajax跨域解决方案

先看看域名组成:     javascript

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

 

 


咱们再来看看什么时候才算跨域:
php

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


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

url 说明 是否跨域

http://www.baidu.comajax

https://www.baidu.com跨域

不一样协议

http://www.baidu.com服务器

http://www.163.comapp

不一样地址

http://www.baidu.com:80函数

http://www.baidu.com:8080url

不一样端口

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" );

相关文章
相关标签/搜索