jsonp的解决ajax跨域问题

来源:互联网 发布:sql server access 编辑:程序博客网 时间:2024/05/22 01:37

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)@ResponseBodypublic 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);}


4、spring4.1以上的解决办法

//jsonp第二种解决办法  需要spring4.1以上@RequestMapping(value="/user/token/{token}",method=RequestMethod.GET)@ResponseBodypublic 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;}



原创粉丝点击