jsonp解决跨域问题

跨域

  就是由于JavaScript同源策略的限制,使得a.com域名下的js无法操作b.com或c.a.com域名下的对象或数据。

      简单理解同一个域就是:相同域名、相同端口、相同协议!

 

JS部分(使用jQuery):

1 var token = sa5d6a4d456ca5d46;
2 $.ajax({
3     url : "/user/token/" + token + ".action",
4     dataType : "jsonp",
5     type : "GET",
6     success : function(data){    
7     }
8 });

后台部分(SpringMVC):

方式一:

 1 //解决跨域问题方法一:
 2     @RequestMapping(value="/user/token1/{token}",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
 3     @ResponseBody
 4     public String getUserByToken1(@PathVariable String token, String callback){
 5         MyResult result = tokenService.getUserByToken(token);
 6         //响应结果之前,判断是否为jsonp请求
 7         if (StringUtils.isNotBlank(callback)) {
 8             //把结果拼成一个js语句响应
 9             return callback + "(" + JsonUtils.objectToJson(result)  + ");";
10         }
11         return JsonUtils.objectToJson(result);
12     }

 方式二(使用Spring的工具类):

//解决跨域问题方法二:
    @RequestMapping(value="/user/token/{token}")
    @ResponseBody
    public Object getUserByToken2(@PathVariable String token, String callback){
        MyResult result = tokenService.getUserByToken(token);
        //响应结果之前,判断是否为jsonp请求
        if (StringUtils.isNotBlank(callback)) {
            //把结果封装成一个js语句响应
            MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(result);
            mappingJacksonValue.setJsonpFunction(callback);
            return mappingJacksonValue;
        }
        return result;
    }

 

posted @ 2018-08-15 16:18  宫新程  阅读(1366)  评论(0编辑  收藏  举报