Ajax 解决浏览器缓存问题
补充:浏览器出于性能考虑,对
GET请求的相同 URL 会使用缓存,导致 Ajax 请求拿到的不是最新的数据。常见的几种解决思路:
1. 加随机参数(最常用)
让每次请求的 URL 都不同,强制浏览器认为是新请求:
xhr.open('GET', '/api/list?nowtime=' + new Date().getTime(), true);
也可以用随机数、随机字符串或哈希:
xhr.open('GET', '/api/list?_=' + Math.random(), true);
2. 服务端禁用缓存
在服务端设置响应头,禁止浏览器缓存该接口:
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
3. 客户端禁用缓存
在发送 XMLHttpRequest 前设置:
xhr.setRequestHeader('Cache-Control', 'no-cache');
xhr.setRequestHeader('Pragma', 'no-cache');
4. 使用 POST 而非 GET
xhr.open('POST', '/api/list', true);
注意:
POST在某些实现下也不会被缓存,但严格来说 HTTP 规范要求POST也可能缓存,应当配合服务端响应头一起处理。
来源整理自:vue3js.cn 面试官系列



