浏览器跨域问题 jsonp

惯例:

我是温浩然:

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

网址: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注解获取数据的,很简单,就这么用,这样,在浏览器中就可以跨域请求数据了。


上一篇:ecs入门训练营心得day2


下一篇:美国科学院院士张首晟:摩尔定律即将失效,人工智能怎么化解这个尴尬? | 2017 IT领袖峰会