您的位置:首页 > Web前端 > JavaScript

浏览器跨域问题 jsonp

2015-07-21 15:36 639 查看
惯例:

我是温浩然:

诚实一点,学得别人的,就是转载的。

网址: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注解获取数据的,很简单,就这么用,这样,在浏览器中就可以跨域请求数据了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: