JS跨域的处理

1.什么是跨域

  1. 域名不同
  2. 域名相同端口相同

解决 Js的跨域问题可以使用jsonp

2. Jsonp原理

这里写图片描述

3. jsonp客户端的实现

$.ajax({
   url:"http://localhost:8080/user/getuserInfo/"+userid,
   dataType:"jsonp",
   type: "GET",
   success: function(data){

   }
})

4. 服务端

1、接收callback 参数,取回调的js的方法名
2、业务逻辑处理
3、响应结果,拼接一个js语句

  @RequestMapping(value="/user/token/{token}", method=RequestMethod.GET, 
            //指定返回响应数据的content-type
            produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ResponseBody
    public String getUserByToken(@PathVariable String token, String callback) {
        TaotaoResult result = userService.getUserByToken(token);
        //判断是否为jsonp请求
        if (StringUtils.isNotBlank(callback)) {
            return callback + "(" + JsonUtils.objectToJson(result) + ");";
        }
        return JsonUtils.objectToJson(result);
    }
    //jsonp的第二种方法,spring4.1以上版本使用
    @RequestMapping(value="/user/token/{token}", method=RequestMethod.GET)
    @ResponseBody
    public Object getUserByToken(@PathVariable String token, String callback) {
        TaotaoResult result = userService.getUserByToken(token);
        //判断是否为jsonp请求
        if (StringUtils.isNotBlank(callback)) {
            MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(result);
            //设置回调方法
            mappingJacksonValue.setJsonpFunction(callback);
            return mappingJacksonValue;
        }
        return result;
    }

猜你喜欢

转载自blog.csdn.net/fd2025/article/details/80411204