Ajax 请求被缓存了怎么办?

A. 志红 阅读 56

我用 jQuery 发了个 Ajax 请求,结果发现浏览器直接返回缓存数据,根本没发新请求!明明后端数据已经变了,前端却还是旧的。

我试过加时间戳:url + '?t=' + Date.now(),但感觉这样太糙了。有没有更规范的缓存控制方法?

后端是 PHP,现在响应头里啥也没设。是不是得在服务端加点什么?比如这个:

header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
我来解答 赞 12 收藏
二维码
手机扫码查看
2 条解答
浩然 Dev
jQuery 发起 Ajax 时加个 cache: false 就行,它会自动在 URL 后面加个时间戳参数,等价于你手动 Date.now() 那套,但写法更规范。

如果想从后端根本解决,在 PHP 里输出你提到的那几个 header 就 OK,Cache-Control、Pragma、Expires 一起上,浏览器绝对不敢缓存:

header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');


前端用 cache: false 是最省事的,后端加 header 是一劳永逸的方案,两者一起用也没问题。
点赞
2026-03-19 15:20
上官兴敏
服务端直接加header就行,你列的那几个都对着呢。PHP里在接口开头加:

header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');


前端这边省心点的话,jQuery的ajax加个 cache: false 也能解决,jquery会自动在URL后面加个时间戳。两个一起用最稳,差不多就行别纠结。
点赞
2026-03-17 16:19