什么是JSONP?,以及Spring對象MappingJacksonValue的使用方式
一,引言
最近小編在寫這樣一套服務端的代碼,說白了就是提供數據和處理一些業務邏輯。這個服務端是單獨的一個工程,提供給PC端,移動端(IOS,Android)等多個終端進行調用。在調試過程中發現這樣的一個異常,才了解到我們的JS請求是不能跨域請求的。為了考慮安全性的問題,JS只能訪問相同域名,相同端口號的地址。但是JS能跨域請求JS,正好利用了這個因素,才有了JSONP這個解決方案。錯誤提示信息如下:
Failed to load http://127.0.0.1:8081/rest/itemcat/all?callback=category.getDataService: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8082' is therefore not allowed access.
二,什么是JSONP?
JSONP其實是解決JS跨域調用數據的一種方案,JS跨域直接請求數據是不可以的,但是JS跨域請求JS腳本是可以的。可以把返回的數據封裝成一個JS腳本,把數據作為。參數傳遞到這個方法中,做一個方法的調用的js跨域請求可以得到此腳本數據,從而獲取到想要到數據。執行流程如下:
三,JSONP使用方式
那使用JSONP請求服務端,那服務端該怎么返回數據呢看如下代碼:
再給大家科普小知識:在使用RequestMapping注解的時候,也可以設置返回JSON數據的字符編碼喲!
produce = MediaType.APPLICATION_JSON_VALUE +“; charset = utf-8“
在這只提供了服務端怎么寫,具體JS怎么調用麻煩各位小伙伴自行學習下,因為調用是前端工程師寫的,沒源碼給我,如果有小伙伴實在沒找到,那就在評論區留言,小編回頭找前端工程師要要哈哈!
-
-
-
public Object getItemCatList(String callback){
-
//需要返回的數據
-
CatResult itemCat = itemCatService.getItemCat();
-
-
//callback 這個是js調用時傳過來的參數,內容就是回調的方法名
-
-
//第一種方式 ,把我們返回的數據轉JSON后,然后拼接我們在js中定義的方法名,把json數據作為參數傳遞進去
-
//返回 String
-
/*String jsonStr = JsonUtils.objectToJson(itemCat);
-
return callback + "("+jsonStr+");";*/
-
-
//第二種方式,使用Spring自帶對象,前提是需要在Srping4.0的版本才有的喲。
-
//返回 Object
-
MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(itemCat);
-
mappingJacksonValue.setJsonpFunction(callback);
-
return mappingJacksonValue;