兩種關於ajax跨域請求解決方案
阿新 • • 發佈:2019-02-20
一、使用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){ }
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" )