- window.location.href 网页完整的url
- location.href: 完整的 URL
- location.protocol: 协议
- location.hostname: 主机名
- location.host: 主机名加端口号
- location.port: 端口号
- location.pathname: 当前 URL 的路径部分
- location.search:从问号 (?) 开始的 URL(查询部分)
- location.hash: 从井号 (#) 开始的 URL(锚)
跨域条件: 当协议、子域名、主域名、端口号中任意一个不相同时,都算作不同域。不同域之间相互请求资源,就算作“跨域”。
注意:跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了。之所以会跨域,是因为受到了同源策略的限制,同源策略要求源相同才能正常进行通信,即协议、域名、端口号都完全一致。
// 上传图片
$('#file').localResizeIMG({
width: 960,
quality: 0.8,
success: function (result) {
if (result.file.size / 1024 / 1024 > 4) {
JC.notice("只能上传不大于4M的图片", 'info');
return false
}
var img = new Image();
img.src = result.base64;
$('.imgBase64Name').val(result.file.name);
var xhr = new XMLHttpRequest();
$(".imgBase64").val(result.base64.replace(/\+/g, '%2B'));
//当前页面域名为bbb域名 接口为aaa域名 导致跨域
var formUrl = 'https://xxx域名/upload/upload?proxyPage=' + document.location.protocol + '//' + location.host +'/uploadCallback.aspx?callback';
$('#form-upload').attr('action', formUrl);
$("#form-upload").submit();
JC.notice("正在上传");
return;
}
})
跨域原因:项目需求能够上传图片,后端接口将base64格式图片转成url,由于存储的图片资源与当前页面的域名不一致--导致跨域了。
解决方案: 接口的请求地址通过动态获取当前页面的协议+域名组合 从而解决同源策略及其限制