1、ajax跨域问题,使用jsonp进行解决
利用js的特性
<script type="text/javascript" src="http://localhost:2701/Scripts/jquery-1.4.4.min.js"></script>
返回后调用方法解析数据到ajax请求中的data数据中
简单的理解为 带callback的json就是jsonp.
2、前端
话不多说,上js代码,使用方法和普通ajax一样,返回数据类型为jsonp即可。
$.ajax({
url : "http://localhost:8089/user/token/" + _ticket,
dataType : "jsonp",
type : "GET",
success : function(data){
if(data.status == 200){
var username = data.data.username;
var html = username + ",欢迎来到淘淘!<a href=\"http://www.taotao.com/user/logout.html\" class=\"link-logout\">[退出]</a>";
$("#loginbar").html(html);
}
}
});
3、服务端 在返回json的时候包装一层即可返回格式 (callback(jsonString);)
@RequestMapping(value="/user/token/{token}",method=RequestMethod.GET,
//指定响应的格式
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;
}