jsonp解决跨域问题
跨域
就是由于JavaScript同源策略的限制,使得a.com域名下的js无法操作b.com或c.a.com域名下的对象或数据。
简单理解同一个域就是:相同域名、相同端口、相同协议!
JS部分(使用jQuery):
1 var token = sa5d6a4d456ca5d46; 2 $.ajax({ 3 url : "/user/token/" + token + ".action", 4 dataType : "jsonp", 5 type : "GET", 6 success : function(data){ 7 } 8 });
后台部分(SpringMVC):
方式一:
1 //解决跨域问题方法一: 2 @RequestMapping(value="/user/token1/{token}",produces = MediaType.APPLICATION_JSON_UTF8_VALUE) 3 @ResponseBody 4 public String getUserByToken1(@PathVariable String token, String callback){ 5 MyResult result = tokenService.getUserByToken(token); 6 //响应结果之前,判断是否为jsonp请求 7 if (StringUtils.isNotBlank(callback)) { 8 //把结果拼成一个js语句响应 9 return callback + "(" + JsonUtils.objectToJson(result) + ");"; 10 } 11 return JsonUtils.objectToJson(result); 12 }
方式二(使用Spring的工具类):
//解决跨域问题方法二: @RequestMapping(value="/user/token/{token}") @ResponseBody public Object getUserByToken2(@PathVariable String token, String callback){ MyResult result = tokenService.getUserByToken(token); //响应结果之前,判断是否为jsonp请求 if (StringUtils.isNotBlank(callback)) { //把结果封装成一个js语句响应 MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(result); mappingJacksonValue.setJsonpFunction(callback); return mappingJacksonValue; } return result; }