標籤:style blog http color io os 使用 java ar
XMLHttpRequest cannot loadhttp://localhost/MongoTest/person.php. Origin http://localhost:81 is not allowed by Access-Control-Allow-Origin.
同源策略導致的跨域請求被拒絕
解決方案:
1.利用<script>標籤
瀏覽器會阻止ajax請求非同源的內容,但沒有限制<script>標籤來訪問非同源的內容,也沒有限制使用動態添加<script>標籤,所以可以採用這種方式打破這種限制。
<script type="text/javascript" src="http://localhost:80/MongoTest/person.php" ></script>
動態添加:即建立一個script標籤,並且為src賦值,然後通過DOM操作添加到HTML文檔中
2.JSONP
JSONP(JSON with Padding)就是伺服器端和用戶端互相協作以完成跨域請求的一種協議,用戶端向伺服器端發送請求並附帶callback函數,伺服器端返回相應的js代碼,這個代碼就是執行回呼函數,參數就是伺服器端返回的JSON資料。用戶端在發起跨域請求時,需要制定具體的回呼函數,比如這個請求http://localhost:80/MongoTest/person.php?callback=sayHello,callback就是回呼函數,伺服器端也要通過callback要提取回呼函數名,所以具體的這個參數需要用戶端和伺服器端達成一致,否則不能實現跨域。用jquery實現jsonp
$.ajax({ type : "get", async:false, url : "http://www.xxx.com/ajax.do", dataType : "jsonp", jsonp: "callbackparam",//服務端用於接收callback調用的function名的參數 jsonpCallback:"success_jsonpCallback",//callback的function名稱 success : function(json){ alert(json); alert(json[0].name); }, error:function(){ alert(‘fail‘); }});
public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/plain"; String callbackFunName = context.Request["callbackparam"]; context.Response.Write(callbackFunName + "([ { name:\"John\"}])");}
跨域請求