jQuery允许携带cookie,解决跨域

首先描述下出现跨域问题的情况

以下几种情况可能会有跨域问题:
1、协议不同,例如: http…https
2、ip不同,例如localhost、、127.0.0.1、、你的本机IP(例如:192.168.12.xxx)
3、端口(8080、、9003)
这些都可能会导致跨域问题。

我在做的这个项目,整个项目前后端都是靠sessionID会话的,如果我给你返回的session你不带回来的话,我会认为你是个新人,你是一个新的sessionID,你的ID和我的ID不一样的所以本次会话到此结束。

而浏览器知道你在跨域的时候 他是不会自己带cookie的(不跨域的情况下,带cookie是浏览器的默认行为)。

温馨提示

请仔细阅读代码块中的注释,不要着急跳过哦
jQuery解决跨域问题:


AjaxAction.prototype.appendToken = function (url) {
	return url;
}

// 预处理返回的数据,防止后台服务不在线时,返回不合法数据
AjaxAction.prototype.preHandleResult = function (data) {
	if (data && (!data.hasOwnProperty('error') || typeof data.error != "number")) {
		data.error = 404;
		data.description = "后台服务异常,请联系管理员";
	}
}

// 如果发同步请求,把async形参值改为false即可
AjaxAction.prototype.get = function (url, jsondata, success, error, async = true, traditional = false) {
	$.ajax({
		type: "get",
		url: this.appendToken(url),
		data: jsondata,
		dataType: "json",
		traditional: traditional,
		async: async,
		// 允许请求携带cookie
		xhrFields: {
			withCredentials: true
		},
		success: function (data) {
			this.preHandleResult(data);
			if (data.error == 0) {
				success(data.value);
			} else {
				error && error(data);
				console.log(`请求:${url}`);
				console.log(`错误:${data.description}`);
				if (error == null) showErrorTip(data.description);
			}
		}.bind(this),
		error: function (data) {
			this.preHandleResult(data);
			error && error(data);
		}.bind(this)
	});
}

这样写上后,你就会发现就算跨域了,浏览器不带,你的请求消息头也会带cookie的。nice成功解决跨域问题!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值