jsonp跨域請求

1.什麼是跨域html

  跨域,指的是瀏覽器不能執行其餘網站的腳本。它是由瀏覽器的同源策略形成的,是瀏覽器施加的安全限制。前端

  所謂同源是指,域名,協議,端口均相同。ajax

2.什麼是jsonpjson

  Jsonp其實就是一個跨域解決方案。Js跨域請求數據是不能夠的,可是js跨域請求js腳本是能夠的。能夠把數據封裝成一個js語句,作一個方法的調用。跨域請求js腳本能夠獲得此腳本。獲得js腳本以後會當即執行。能夠把數據作爲參數傳遞到方法中。就能夠得到數據。從而解決跨域問題。跨域

3.jsonp的原理瀏覽器

  瀏覽器在js請求中,是容許經過script標籤的src跨域請求,能夠在請求的結果中添加回調方法名,在請求頁面中定義方法,既可獲取到跨域請求的數據。安全

4.服務端代碼服務器

方式一:本身拼裝返回結果app

    @ResponseBody
    public String getItemCatList(String callback) {
         //此處獲取對象信息
        CatResult catResult = itemCatService.getItemCatList();
        //把pojo轉換成json字符串
        String json = JsonUtils.objectToJson(catResult);
        //拼裝返回值//用回調函數名稱包裹返回數據,這樣,返回數據就做爲回調函數的參數傳回去了
String result = callback + "(" + json + ");"; return result; }

方式二:使用MappingJacksonValue對象拼裝返回結果 函數

@ResponseBody
    public Object getItemCatList(String callback) {
        CatResult catResult = itemCatService.getItemCatList();
        MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(catResult);
        mappingJacksonValue.setJsonpFunction(callback);
        return mappingJacksonValue;
    }

5.客戶端代碼

  5.1基於JavaScript標籤實現調用

  添加一個<script>標籤,用於發起跨域請求;注意看請求地址後面帶了一個callback=showData的參數;

  showData便是回調函數名稱,傳到後臺,用於包裹數據。數據返回到前端後,就是showData(result)的形式,由於是script腳本,因此自動調用showData函數,而result就是showData的參數。

  至此,咱們算是跨域把數據請求回來了,可是比較麻煩,須要本身寫腳本發起請求,而後寫個回調函數處理數據,不是很方便

    <script>
        //回調函數
        function showData (result) {
            var data = JSON.stringify(result); //json對象轉成字符串
            alert(data);
        }

        $(document).ready(function () {//向頭部輸入一個腳本,該腳本發起一個跨域請求
            $("head").append("<script src='http://localhost:9090/student?callback=showData'><\/script>");
        });
    </script>

  5.2基於ajax的jsonp方式實現調用

$.ajax({
    url: "http://localhost:9090/student",
    type: "GET",
    dataType: "jsonp", //指定服務器返回的數據類型
    success: function (data) {
        var result = JSON.stringify(data); //json對象轉成字符串
        alert(result);
    }
});

瞭解更多參考:https://www.cnblogs.com/chiangchou/p/jsonp.html

 

  

@ResponseBody

     public Object getItemCatList(String callback) {

          CatResult catResult = itemCatService.getItemCatList();

          MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(catResult);

          mappingJacksonValue.setJsonpFunction(callback);

          returnmappingJacksonValue;

     }

相關文章
相關標籤/搜索