天天看點

JSONP的調用

原理

5.3.2 什麼是jsonp?

Jsonp其實就是一個跨域解決方案。Js跨域請求資料是不可以的,但是js跨域請求js腳本是可以的。可以把資料封裝成一個js語句,做一個方法的調用。跨域請求js腳本可以得到此腳本。得到js腳本之後會立即執行。可以把資料做為參數傳遞到方法中。就可以獲得資料。進而解決跨域問題。

5.3.3 jsonp的原理:

浏覽器在js請求中,是允許通過script标簽的src跨域請求,可以在請求的結果中添加回調方法名,在請求頁面中定義方法,既可擷取到跨域請求的資料。

JSONP的調用

eg:

現在像此端口發送請求 響應Js腳本
 URL_Serv: "http://localhost:8081/rest/itemcat/list?callback=category.getDataService",
 然後在背景處理該請求 回調原頁面的方法(此方法是拼接字元串,利于了解,由于會亂碼,可以在requestMapping後面設定傳回參數)
 ,
 @RequestMapping(value="/itemcat/list",produces=MediaType.APPLICATION_JSON_VALUE+";charset=utf-8")
    @ResponseBody
    private String getItemCat(String callback){
        CatResult itemSevice = itemCatService.getItemSevice();
        //把pojo轉換成字元串
        String json = JsonUtils.objectToJson(itemSevice);
        //拼裝傳回值
        String result = callback+"("+json+");";
        return result;
    }

Spring也提供了對應的解決辦法( spring mvc 需要 版本以上)
,
    @RequestMapping("/itemcat/list")
    @ResponseBody
    private Object getItemCat(String callback){
        CatResult itemSevice = itemCatService.getItemSevice();
        MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(itemSevice);
        mappingJacksonValue.setJsonpFunction(callback);
        return mappingJacksonValue;
    }

           

繼續閱讀