【TaoTao】使用JQueryJsonp 完美解決JS跨域問題
阿新 • • 發佈:2019-01-30
問題描述:
我有一段資源.json檔案是放到後臺的taotao-rest提供服務的介面專案當中,我前臺另起了一個maven的專案taotao-portal。web伺服器都是Tomcat,後臺埠8081,前臺埠8082。當我從前臺訪問這一段json資源的時候,就出現了跨域問題。
提示了不同源的URL禁止訪問
什麼是JS跨域:
JS為了安全,有個限制,不允許跨域訪問,簡單的說就是域名不同就是跨域了,我們專案中遇到的是域名相同,埠不同。還有一種情況是IP不同。使用JS沒有辦法直接使用ajax(ajax請求受同源策略影響)請求rest後臺提供的服務。
解決問題:
在JS中可以使用jsonp解決跨域問題,在js中不能跨域,但是可以跨域請求一段片段,src載入的js片段。我們可以把資料包裝成JS片段,寫一個方法,把json資料作為引數傳遞。形成一個方法的呼叫語句。可以使用ajax請求js片段,當js片段到達瀏覽器會被立即執行,就可以獲得資料引數了。在瀏覽器端,先建立好callback方法,在引數中獲取資料。
如圖所示:
程式碼思路:
1.寫callback函式
2.ajax請求,把方法名傳遞給服務端
3.服務端接收回調方法名,把資料包裝好,響應給客戶端。
程式碼:
FN_GetData: function() { //使用jsonp來實現跨域請求 $.getJSONP(this.URL_Serv, category.getDataService); //直接使用ajax請求json資料 // $.getJSON(this.URL_Serv, function(json){ // category.getDataService(json); // }); },
URL_Serv: "http://localhost:8081/category.json?callback=category.getDataService",
總結:
jQuery提供的getJsonp方法輕鬆的解決跨域訪問的問題,可以獲取json格式的資料。但是同樣有問題存在,ajax的核心是通過XmlHttpRequest獲取非本頁內容,而jsonp的核心則是動態新增<script>標籤來呼叫伺服器提供的js指令碼。jsonp請求伺服器端資料,如果被不信任的服務使用時會很危險。