ajax 技術使用xmlhttprequest組件附送請求時,發送請求的url和本網頁的url地址必須在同一個域名下
若是須要跨域,可使用iframe或者<javascript src="url"></script>的方式
http://www.cnblogs.com/Spring/archive/2008/10/21/1315882.html
http://exceptioneye.iteye.com/blog/1405495
新的W3C策略實現了HTTP跨域訪問,還虧我找了好久的資料解決這個問題:
只須要在servlet中返回的頭部信息中添加Access-Control-Allow-Origin這個既可。
好比我要開放全部我本地的跨域訪問,就設置以下:response.setHeader("Access-Control-Allow-Origin", "http://127.0.0.1/*");
這樣我本地的A工程中的AJAX請求就能夠跨域請求B工程中的servlet。 javascript
1: var scriptBlock = document.createElement("script");
2:
3: function StartGet()
4: {
5: scriptBlock.src = "";
6: scriptBlock.src = "http://Domain2/GetData.aspx";
7: scriptBlock.type = "text/javascript";
8: scriptBlock.language = "javascript";
9: document.getElementsByTagName("head")[0].appendChild(scriptBlock);
10: scriptBlock.onreadystatechange = ReturnData;
11: }
12:
13: function ReturnData()
14: {
15: //alert(scriptBlock.readyState);
16:
17: //uninitialized Object is not initialized with data.
18: //loading Object is loading its data.
19: //loaded Object has finished loading its data.
20: //interactive User can interact with the object even though it is not fully loaded.
21: //complete Object is completely initialized.
22:
23: if("loaded" == scriptBlock.readyState)
24: {
25: var div = document.getElementById("htmldiv");
26: div.innerHTML = a.project[0].name; //a是返回的json裏面的變量
27: }
28: }
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Generator" content="EditPlus®">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>Document</title>
</head>
<body>
<script src="jquery-1.8.3.min.js"></script>
<script type="text/javascript">
jQuery(document).ready(function(){
$.ajax({
type: "GET",
async: false,
//url: "http://test/jsonp.php",
url:"http://local.ok.com/1.php",
dataType: "jsonp",
jsonp: "callback",//傳遞給請求處理程序或頁面的,用以得到jsonp回調函數名的參數名(通常默認爲:callback)
jsonpCallback:"bbb",//自定義的jsonp回調函數名稱,默認爲jQuery自動生成的隨機函數名,也能夠寫"?",jQuery會自動爲你處理數據
success: function(json){
alert('您查詢到航班信息:票價: ' + json.price + ' 元,餘票: ' + json.tickets + ' 張。回調函數名爲: '+json.func);
},
error: function(){
alert("fail");
}
});
});
</script> php
</body>
</html>html
跨域問題存在實際上源於瀏覽器的同源策略(same origin policy),簡單講,同源就是要求域名,協議,端口三者都一致;java
一、一個衆所周知的問題,Ajax直接請求普通文件存在跨域無權限訪問的問題,甭管你是靜態頁面、動態網頁、web服務、WCF,只要是跨域請求,一概不許; jquery
二、不過咱們又發現,Web頁面上調用js文件時則不受是否跨域的影響(不只如此,咱們還發現凡是擁有"src"這個屬性的標籤都擁有跨域的能力,好比<script>、<img>、<iframe>); web
三、因而能夠判斷,當前階段若是想經過純web端(ActiveX控件、服務端代理、屬於將來的HTML5之Websocket等方式不算)跨域訪問數據就只有一種可能,那就是在遠程服務器上設法把數據裝進js格式的文件裏,供客戶端調用和進一步處理; ajax
四、恰巧咱們已經知道有一種叫作JSON的純字符數據格式能夠簡潔的描述複雜數據,更妙的是JSON還被js原生支持,因此在客戶端幾乎能夠爲所欲爲的處理這種格式的數據; json
五、這樣子解決方案就呼之欲出了,web客戶端經過與調用腳本如出一轍的方式,來調用跨域服務器上動態生成的js格式文件(通常以JSON爲後綴),顯而易見,服務器之因此要動態生成JSON文件,目的就在於把客戶端須要的數據裝入進去。 跨域
六、客戶端在對JSON文件調用成功以後,也就得到了本身所需的數據,剩下的就是按照本身需求進行處理和展示了,這種獲取遠程數據的方式看起來很是像AJAX,但其實並不同。 瀏覽器
七、爲了便於客戶端使用數據,逐漸造成了一種非正式傳輸協議,人們把它稱做JSONP,該協議的一個要點就是容許用戶傳遞一個callback參數給服務端,而後服務端返回數據時會將這個callback參數做爲函數名來包裹住JSON數據,這樣客戶端就能夠隨意定製本身的函數來自動處理返回數據了。
若是對於callback參數如何使用還有些模糊的話,咱們後面會有具體的實例來說解。
上面都是網絡上收集的
簡單點說,解決ajax跨域
一、response.setHeader("Access-Control-Allow-Origin", http://127.0.0.1/*);
二、設置domain
三、jsonp(jsonp就是js動態建立iframe後者script標籤請求服務器,服務器返回的是一個js的可執行回調方法。)
四、經過帶有src屬性字樣的標籤處理,好比,<script><img><iframe>