惯例:
我是温浩然:
诚实一点,学得别人的,就是转载的。
网址:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html
只有浏览器有跨域的问题,所以说,这篇文章是为了解决浏览器的跨域问题。
跨域传输数据用jsonp格式。至于想知道什么是jsonp,看上面的网址去。大神写的。
根据文章的介绍,我这种属于jquery实现jsonp。
浏览器中代码如下:
var map={ name:$('#editCardModal .name').val(), description:$('#editCardModal .description').val(), expire:$('#editCardModal .expire').val() } $.ajax({ type : 'GET', contentType:'application/jsonp', url:"http://xxxxxxxx/editCard", dataType:'jsonp', data:map, async: false, jsonp:'callback', success:function(result) { window.location.reload(); }, error:function(){ alert('系统出错,请与管理员联系'); } });
map,是我打包好的数据,通过这种方式,就把这段数据传递到http://xxxxxxx中了。
在服务器中是怎样解析的呢?
代码如下:
/** * 获得活动列表接口 * @param request 请求路径格式 * ...sms-server/activity/getActLiInf?callback=?&accessKeyId=?&accessKeySecret=?&page=?&size=?&status=? * @param callback JSONP回掉函数 * @param accessKeyId,密钥Id * @param accessKeySecret,密钥密码 * @param page,当前页数,默认为1 * @param size,每页条数,默认为20 * @param status,活动状态,0--未开始,1--进行中,2--已结束 默认为全部 * */ @ResponseBody @RequestMapping(value="/getActLiInf",method=RequestMethod.GET) public JSONPObject getActListInterface(HttpServletRequest request, @RequestParam String callback,@RequestParam String accessKeyId, @RequestParam String accessKeySecret,@RequestParam int status, @RequestParam int page,@RequestParam int size) { ResultCode resultCode=ResultCode.SUCCEED; Map<String,Object> mapResponse = new HashMap<String,Object>(); Object result = null; try { ParamChecker.notEmpty("accessKeyId", accessKeyId); ParamChecker.notEmpty("accessKeySecret", accessKeySecret); Company company=companyService.getCompanyByAccessKeyId(accessKeyId); if(!company.getAccessKeySecret().equals(accessKeySecret)){ resultCode = ResultCode.INTERNAL_ERROR; result+="鉴权失败"; throw new UnAuthedException("鉴权失败"); } List<String> enIPList = ipBlackListService.getEnIPList(); String ip = request.getRemoteAddr(); if(!enIPList.contains(ip)){ resultCode = ResultCode.INTERNAL_ERROR; result+="ip拒绝访问"; throw new UnAuthedException("拒绝访问"); } if(String.valueOf(page)==null||page<=0){ page=1; } if(String.valueOf(size)!=null&&size<=0){ size=20; } if(String.valueOf(status)!=null&&status<=-1&&status>2){ status=-1; } PageInfo<PageActivity> pageInfo =pageActService. getPageActListByCondition(company.getId(),status,page,size); List<Company> companys=companyService.getCompany(); Map<String,Object> mapAct = new HashMap<String,Object>(); mapAct.put("pageInfo", pageInfo); mapAct.put("companys", companys); result=mapAct; } catch (VerifyException e) { resultCode = ResultCode.INTERNAL_ERROR; result = e.getMessage(); } mapResponse.put("resultCode", resultCode); mapResponse.put("result", result); return new JSONPObject(callback,mapResponse) ; }
我这里是通过spring注解获取数据的,很简单,就这么用,这样,在浏览器中就可以跨域请求数据了。