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

相關文章
相關標籤/搜索