Ajax跨域请求处理

js应该怎么写?

var E3MALL = {
	checkLogin : function(){
		//使用Jquery的Cookie插件拿到Cookie值
		var _ticket = $.cookie("token");
		//判断Coolie值是否拿到,如果没有拿到,说明没有登陆
		if(!_ticket){
			return ;
		}
		//如果拿到那么就表示已经登陆,我们发送Ajax跨域请求
		/**
		 * dataType : "jsonp"  Jquery提供,表示这是一个跨域请求,默认会有一个callback参数提交
		 * 			到服务器,然后服务器配合返回,其实底层走的是拼装的js语句,因为浏览器不支持
		 * 			跨域请求,但是浏览器支持跨域加载Js文件,底层是利用scirpt标签
		 */
		$.ajax({
			url : "http://localhost:8088/user/token/" + _ticket,
			dataType : "jsonp",
			//应该是必须为get,要不然参数无法拼装
			type : "GET",
			success : function(data){
				if(data.status == 200){
					var username = data.data.username;
					var html = username + ",欢迎来到宜立方购物网!<a href=\"http://www.e3mall.cn/user/logout.html\" class=\"link-logout\">[退出]</a>";
					//html方法,会把以前的内容全部覆盖掉
					$("#loginbar").html(html);
				}
			}
		});
	}
}

$(function(){
	// 查看是否已经登录,如果已经登录查询登录信息
	E3MALL.checkLogin();
});

服务器端应该怎么配合呢?

/**
	 * 第二种方式解决,Spring4.1之后进行支持
	 * 既然返回的是对象又有@ResponseBody,所有我们不用指定Content-Type
	 * @param token
	 * @param callback
	 * @return
	 */
	@RequestMapping(value = "/user/token/{token}")
	@ResponseBody
	public Object getUserByToken(@PathVariable String token,String callback){
		E3Result e3Result = tokenService.getUserByToken(token);
		//判断是不是跨域请求
		if (StringUtils.isNotBlank(callback)) {
			//使用Spring提供的方法配合实现跨域请求,就是免去了我们进行拼装
			MappingJacksonValue jacksonValue = new MappingJacksonValue(e3Result);
			//设置回调函数名
			jacksonValue.setJsonpFunction(callback);
			return jacksonValue;
 		}
		return e3Result;
	}

第一种方式

/**
	 * 根据前台Ajax传过来的token,查询用户信息
	 * callback:配合JQeury进行跨域访问
	 * 			 响应的时候,要拼装成Js语句返回
	 * 			这时候返回的数据类型就要改成由E3Result改为String,这种情况下又有一个问题
	 * 			就是浏览器,会把这个字符串默认当人text/html处理而不是application/json
	 * 			我们可以设置produce来改变成application
	 * @param token
	 * @return
	 */
	@RequestMapping(value = "/user/token/{token}" , produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
	@ResponseBody
	public String getUserByToken(@PathVariable String token,String callback){
		E3Result e3Result = tokenService.getUserByToken(token);
		//判断是不是跨域请求
		if (StringUtils.isNotBlank(callback)) {
			//是,拼装js语句
			return callback + "(" + JsonUtils.objectToJson(e3Result)  + ");";
 		}
		return JsonUtils.objectToJson(e3Result);
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值