1. 程式人生 > >兩種關於ajax跨域請求解決方案

兩種關於ajax跨域請求解決方案

一、使用jsonp實現跨域請求

在前端開發這中你會發現,所有帶src屬性的標籤都可以跨域訪問其他伺服器檔案。jsonp實現的原理也是如此。

以jsonp的資料型別進行請求時,JQ會動態在頁面中新增script標籤,將請求內容放置到src中。

jsonp型別請求資料時,無法使用post方式(你會發現,在JQ中即使你將type設定為POST方式,JQ也會將其轉換為get方式請求)。

jsonp方式請求不支援修改頭部資訊引數。伺服器端資料返回也需要做相應的處理,返回的資料必須是一個JS程式碼。Jsonp請求時,設定jsonpCallback引數假設為reciver,伺服器處理資料返回格式類似於reviver('datas need retun '),請求成功後,會自動呼叫前端reciver方法。

JQ前端請求程式碼:

$.ajax({
		type: "get",
		async: false,
		url: "http://192.168.2.229:8081/api/web_search_directnew.html",
		dataType: "jsonp",
		jsonpCallback: "receive", //自定義的jsonp回撥函式名稱,預設為jQuery自動生成的隨機函式名,也可以寫"?",jQuery會自動為你處理資料  
		success: function(data) {
			console.log(data)
		},
		error: function() {
			alert('fail');
		}
	});
function receive(data){
	
}
java後臺程式碼:
def index() {
        def a = [:]
        a.name = "張小白"
        a.age = 12
        a.sex = '男'
        a = a as JSON
        render params.callback + "('" + a + "')"
    }

二、Access-Control-Allow-Origin

伺服器端在返回資源的時候,指定這個資源能被哪些域所訪問。如response.addHeader( "Access-Control-Allow-Origin", "http://192.168.2.229:8020" );指定http://192.168.2.229:8020可以進行跨域訪問該資源,若不限制,則改成*

瀏覽器限制:Chrome 3+,Firefox 3.5+,Opera 12+,Safari 4+,IE 8+

js程式碼:

$.ajax({
	url: "http://192.168.2.229:8091/myTest/hellow/index",
	type: "POST",
	crossDomain: true,
	dataType: "json",
	success: function(result) {
		alert(JSON.stringify(result));
	},
	error: function(xhr, status, error) {
	alert(status);
	}
});
伺服器:
response.addHeader( "Access-Control-Allow-Origin", "http://192.168.2.229:8020" )