1.什么是跨域
- 域名不同
- 域名相同端口相同
解决 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;
}