利用ajax如何根据权限加载目录,AJAX 请求静态资源 权限问题

# AJAX 请求静态资源 权限问题

正常来说,我们项目中的静态资源都是可以直接访问的,但在商品说和巧匠项目中,我们对用户的素材(图片、视频、音频)都会做权限控制,用户在登录的情况下,如果是基于 `cookie` 认证的话,通过 `img、audio、video` 直接访问资源,请求都会自动携带 `cookie` ,是不会有什么问题;

但 有些时候 我们需要做一些资源的预加载(使用 ajax、fetch),比如 巧匠中的 `图片、音频` 裁剪功能,我们本地开发时和服务器肯定不在同域,使用 ajax、fetch 预加载资源时会加载失败(提示没有授权),初次遇到这个问题时,可能会比较懵,一个静态资源为啥需要授权,右键 new tab 又能打开;

![](https://img.kancloud.cn/68/c3/68c372ab4ae9dec1ab81ab2b77506834_1582x380.png)

## 解决方法:

1、原生 AJAX:

```

var xhr = new XMLHttpRequest()

xhr.open('GET', url)

xhr.withCredentials = true // 携带跨域 cookie

xhr.send()

```

2、jQuery:

```

$.ajax({

type: "GET",

url: url,

xhrFields: {

withCredentials: true // 携带跨域 cookie

},

success: function(data) {

}

})

```

3、axios:

```

axios.interceptors.request.use((config) => {

config.withCredentials = true // 携带跨域 cookie

return confi

}, (error) => {

return Promise.reject(error)

})

```

4、fetch

```

fetch(url, {

credentials: 'include', // 携带跨域 cookie

mode: 'cors', // 支持跨域请求

}).then(response => response.json())

```

> 其实还有一个类似的场景,使用 [FileSaver]([https://github.com/eligrey/FileSaver.js](https://github.com/eligrey/FileSaver.js)) 下载文件时,直接传一个 URL 也会出现这个问题,解决办法是,先手动下载成 `blob` 对象,然后再通过 `FileSaver` 保存;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值