ajax不能跨域,比如您是www.baidu.com
,您就不能請求
www.163.com
的檔案。但您可以請求
。這是因為安全原因,對於任何後台語言來說、伺服器程式來說,所有的xhr
型別的請求,如果來自其他的伺服器,將不予應答。
一、使用jsonp
jsonp就像是json+padding一樣(padding這裡我們理解為呼叫函式時的填充)。
綠色部分是json
,外面的
fun();
是函式的呼叫,是
padding
補充部分。
jsonp的原理很簡單,就是把定義寫在了html原始檔裡面,而將呼叫放在script標籤引用的檔案裡面,由於script標籤可以跨檔案使用,這樣就實現了跨域,引用的檔案可以有各種格式php 、js、txt等。
下面舉個例子:
jsonp.txt裡面的內容如下:
//呼叫函式執行結果:fun(,
, ]});
由於這樣使用起來不方便,我們可以將它封裝成乙個實用輪子:
jquery已經有封裝好的api可以直接使用:名稱是ajax()
可以檢視jquery手冊,參考如下
二、使用php偷資料
幾乎每種後台語言都可以實現該功能,以下是php的示例:
<?php其中,header是設定返回到瀏覽器中的標頭檔案的字符集和檔案型別header("content-type:text/html;charset=utf-8");
$a = file_get_contents("**");
print_r($a);
?>
三、補充一點:
來自:darren_聶微東 - 關注前端技術的博文:
ajax post&跨域 解決方案 - cors
利用 cors, 只需新增乙個標頭,就可以允許來自 的請求,下圖是我在php中的 hander() 設定,「*」號表示允許任何域向我們的服務端提交請求:
也可以設定指定的網域名稱,如網域名稱 ,那麼就允許來自這個網域名稱的請求:
當前我設定的header為「*」,任意乙個請求過來之後服務端我們都可以進行處理&響應,那麼在除錯工具中可以看到其頭資訊設定,其中見紅框中有一項資訊是「access-control-allow-origin:*」,表示我們已經啟用cors,如下圖。
ps:由於demo都在我廠的兩台測試機間完成,外網也不能訪問,所以在這就不提供demo了,見諒
簡單的乙個header設定,乙個支援跨域&post請求的server就完成了:)
當然,如果沒有開啟cors必定失敗的啦,如下圖:
Ajax跨域問題的兩種解決方法
瀏覽器不允許ajax跨站請求,所以存在ajax跨域問題,目前主要有兩種辦法解決。1 在請求頁面上使用access control allow origin標頭。header access control allow origin header access control allow origin ...
SpringMVC解決跨域的兩種方案
跨域,即跨站http請求 cross site http request 指發起請求的資源所在域不同於請求指向資源所在域的http請求。當使用前後端分離,後端主導的開發方式進行前後端協作開發時,常常有如下情景 後端開發完畢在伺服器上進行部署並給前端api文件。前端在本地進行開發並向遠端伺服器上部署的...
SpringMVC解決跨域的兩種方案
跨域,即跨站http請求 cross site http request 指發起請求的資源所在域不同於請求指向資源所在域的http請求。當使用前後端分離,後端主導的開發方式進行前後端協作開發時,常常有如下情景 後端開發完畢在伺服器上進行部署並給前端api文件。前端在本地進行開發並向遠端伺服器上部署的...