1、ajax跨域問題,使用jsonp進行解決
<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;
}