原理
5.3.2 什麼是jsonp?
Jsonp其實就是一個跨域解決方案。Js跨域請求資料是不可以的,但是js跨域請求js腳本是可以的。可以把資料封裝成一個js語句,做一個方法的調用。跨域請求js腳本可以得到此腳本。得到js腳本之後會立即執行。可以把資料做為參數傳遞到方法中。就可以獲得資料。進而解決跨域問題。
5.3.3 jsonp的原理:
浏覽器在js請求中,是允許通過script标簽的src跨域請求,可以在請求的結果中添加回調方法名,在請求頁面中定義方法,既可擷取到跨域請求的資料。
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;
}