Jquery ajax在請求不同域名(網路)的URL時,由於瀏覽器安全限制(同源策略)是不允許請求的,將會發生錯誤。如果想要在這樣的場景下獲取返回的資料,可以參考下面的方法:
1、搭建伺服器做代理捉取跨域請求返回的資料,本地應用頁面的ajax請求建立的代理伺服器就能間接的實現這樣的需求。但是此種做法較為複雜,不建議使用;
2、使用jsonp跨域訪問,這種方法是較為普遍的解決方案,其實現原理是:HTML的<script>標籤是可以突破同源策略從其他來源獲取資料,所以可以透過<script>標籤引入jsonp檔案,然後透過一系列JS操作獲取資料。
具體實現步驟如下:
利用本地頁面js建立一個<script>元素,地址指向第三方的API網址,形如:
<script src="http://www.example.net/api?param1=1¶m2=2"></script>
提供一個回撥函式來接收資料(函式名可約定,或透過地址引數傳遞), 第三方產生的響應為json資料的包裝(故稱之為jsonp,即json padding),形如:
callback({"name":"hax","gender":"Male"})
這樣瀏覽器會呼叫callback函式,並傳遞解析後json物件作為引數。本地指令碼可在callback函數里處理所傳入的資料。
示例程式碼:
<script>
var url = "http://localhost:8080/crcp/rcp/t99eidt/testjson.do?jsonp=callbackfunction";
var script = document.createElement("script");
script.setAttribute("src", url); //load javascript
document.getElementsByTagName("head")[0].appendChild(script);
//回撥函式
function callbackfunction(data){
var html=JSON.stringify(data.RESULTSET);
alert(html);
}
</script>
使用jsonp需要後端程式碼配合, 後臺返回的json外面需要由回撥函式包裹。
Jquery ajax在請求不同域名(網路)的URL時,由於瀏覽器安全限制(同源策略)是不允許請求的,將會發生錯誤。如果想要在這樣的場景下獲取返回的資料,可以參考下面的方法:
1、搭建伺服器做代理捉取跨域請求返回的資料,本地應用頁面的ajax請求建立的代理伺服器就能間接的實現這樣的需求。但是此種做法較為複雜,不建議使用;
2、使用jsonp跨域訪問,這種方法是較為普遍的解決方案,其實現原理是:HTML的<script>標籤是可以突破同源策略從其他來源獲取資料,所以可以透過<script>標籤引入jsonp檔案,然後透過一系列JS操作獲取資料。
具體實現步驟如下:
利用本地頁面js建立一個<script>元素,地址指向第三方的API網址,形如:
<script src="http://www.example.net/api?param1=1¶m2=2"></script>
提供一個回撥函式來接收資料(函式名可約定,或透過地址引數傳遞), 第三方產生的響應為json資料的包裝(故稱之為jsonp,即json padding),形如:
callback({"name":"hax","gender":"Male"})
這樣瀏覽器會呼叫callback函式,並傳遞解析後json物件作為引數。本地指令碼可在callback函數里處理所傳入的資料。
示例程式碼:
<script>
var url = "http://localhost:8080/crcp/rcp/t99eidt/testjson.do?jsonp=callbackfunction";
var script = document.createElement("script");
script.setAttribute("src", url); //load javascript
document.getElementsByTagName("head")[0].appendChild(script);
//回撥函式
function callbackfunction(data){
var html=JSON.stringify(data.RESULTSET);
alert(html);
}
</script>
使用jsonp需要後端程式碼配合, 後臺返回的json外面需要由回撥函式包裹。