浏览器跨域问题 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注解获取数据的,很简单,就这么用,这样,在浏览器中就可以跨域请求数据了。
我是温浩然:
诚实一点,学得别人的,就是转载的。
网址: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注解获取数据的,很简单,就这么用,这样,在浏览器中就可以跨域请求数据了。
相关文章推荐
- extjs初学者教程
- 使用GSON解析json
- JavaScript垃圾回收机制
- Jackson 框架,轻易转换JSON
- jstl标签库
- JavaScript 哪些值可以作为If 判断条件
- JS高级程序设计14-表单脚本
- JSON.net的转换操作
- js页面跳转常用的几种方式
- 20150721—HTML的定位 JS (转)
- 正则表达式入门浅析
- ExtJS学习-------Ext正确Dom操作:Ext.get Ext.fly Ext.getDom
- JSON用法
- django框架使用angular js入门
- js中的数据类型
- SWFUpload.js
- JSTL
- 五种 JSP页面跳转方法详解
- JSON详解
- 使用 Chrome 开发者工具进行 JavaScript 问题定位与调试