原理
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后面设置返回参数)
1,
@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 需要 4.1版本以上)
2,
@RequestMapping("/itemcat/list")
@ResponseBody
private Object getItemCat(String callback){
CatResult itemSevice = itemCatService.getItemSevice();
MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(itemSevice);
mappingJacksonValue.setJsonpFunction(callback);
return mappingJacksonValue;
}