vue项目在IE中自动读取缓存中的数据,不重新发请求
问题描述
近期项目碰到一个bug。就是在IE下,如果先用管理员用户登录网站,进入后台管理(不同用户有不同的权限菜单,通过向后端请求获取)。但是如果之后在不清理缓存的情况下,我再用采购人用户登录进后台时,权限菜单还是管理员的。
分析原因
别的浏览器都正常,拿这肯定是IE浏览器特殊的缓存机制导致的。通过调试发现出现了这样的情况
这就是问题的根本原因,默认从缓存中获取了数据,而没有重新发请求
解决方法
要解决这个问题,我们只需要保证每个请求都是新的请求就可以了。
我们可以在封装axios时,默认给请求加上时间戳,下面是给get和post请求默认添加时间戳:
// 添加时间戳
if (config.method === 'post') {
config.data = {
...config.data,
t: Date.parse(new Date()) / 1000
}
} else if (config.method === 'get') {
config.params = {
t: Date.parse(new Date()) / 1000,
...config.params
}
}
需要注意的一点,如果你的post请求参数序列化了,那么你就不能给post请求添加时间戳,因为他会把参数变成一个一个字符,所以一般来说,只给get请求加时间戳就好了