Ajax 请求被缓存了怎么办?
我用 jQuery 发了个 Ajax 请求,结果发现浏览器直接返回缓存数据,根本没发新请求!明明后端数据已经变了,前端却还是旧的。
我试过加时间戳:url + '?t=' + Date.now(),但感觉这样太糙了。有没有更规范的缓存控制方法?
后端是 PHP,现在响应头里啥也没设。是不是得在服务端加点什么?比如这个:
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
cache: false就行,它会自动在 URL 后面加个时间戳参数,等价于你手动 Date.now() 那套,但写法更规范。如果想从后端根本解决,在 PHP 里输出你提到的那几个 header 就 OK,Cache-Control、Pragma、Expires 一起上,浏览器绝对不敢缓存:
前端用
cache: false是最省事的,后端加 header 是一劳永逸的方案,两者一起用也没问题。前端这边省心点的话,jQuery的ajax加个
cache: false也能解决,jquery会自动在URL后面加个时间戳。两个一起用最稳,差不多就行别纠结。