JSONP的调用

原理
5.3.2 什么是jsonp?
Jsonp其实就是一个跨域解决方案。Js跨域请求数据是不可以的,但是js跨域请求js脚本是可以的。可以把数据封装成一个js语句,做一个方法的调用。跨域请求js脚本可以得到此脚本。得到js脚本之后会立即执行。可以把数据做为参数传递到方法中。就可以获得数据。从而解决跨域问题。

5.3.3 jsonp的原理:
浏览器在js请求中,是允许通过script标签的src跨域请求,可以在请求的结果中添加回调方法名,在请求页面中定义方法,既可获取到跨域请求的数据。

JSONP的调用_第1张图片

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;
    }

你可能感兴趣的:(jsonp)