在最近的分布式項目中,由於前端需要向后台請求數據,但不是同一個域名的,常用的ajax方法並不能成功調用,索然后台有數據返回,但是並不能被前端正常解析.
於是便查詢知道了后台返回的數據格式的問題.不能用通常的return 串或者對象的形式來回傳.
在controller中,需要返回值為MappingJacksonValue,並且在MappingJacksonValue對象中添加一個回調函數屬性,這樣會在數據回傳時將前端的JQuery的回調
函數(一般前端默認為callback)一起封裝到回傳的數據中,前台的jspon就會在解析時調用函數來進行回顯;
controller代碼如下:
1 @RequestMapping("/check/{param}/{type}") 2 @ResponseBody 3 public MappingJacksonValue findCheckUser( @PathVariable String param,@PathVariable Integer type,String callback){ 4 5 boolean flag=userService.findCheckUser(param,type); 6 7 MappingJacksonValue value=new MappingJacksonValue(SysResult.oK(flag)); 8 value.setJsonpFunction(callback); 9 10 return value; 11 }
前台jspon代碼如下:
1 $.ajax({ 2 url : "http://sso.jt.com/user/check/"+escape(pin)+"/1? 3 r=" + Math.random(), 4 dataType : "jsonp", 5 success : function(data) { 6 checkpin = data.data?"1":"0"; 7 if (!data.data) { 8 validateSettings.succeed.run(option); 9 namestate = true; 10 }else { 11 validateSettings.error.run(option, "該用戶名已占用!"); 12 namestate = false; 13 } 14 } 15 });