7

可能重复:
防止缓存 AJAX 调用

我正在使用 jQuery 读取 Web 服务器上的一个小文本文件:

jQuery.get('scores.txt', function(data) {
    parseScores(data);
});

这几乎可以正常工作——但它不能可靠地加载文件的最新版本。即使story.txt已更改,刷新页面也会返回完全相同的值data

服务器是标准的 Mac OS Apache,没有启用缓存,它与客户端是同一台机器——所以理论上我和它之间没有其他缓存。

如果我加载http://127.0.0.1/scores.txt到浏览器中,它总是会打开最新版本。

查看 Apache 日志,对于页面无法更新的时间,jQuery GET 请求永远不会到达服务器。

我怀疑我可能需要将此问题移至 serverfault.com,但任何人都可以看到我的 JavaScript 有问题会导致它以这种方式运行吗?

有没有办法使用 JavaScript/jQuery 强制浏览器请求文件的新副本?

提前致谢。

4

4 回答 4

6

您可以为每个请求添加一个唯一标识符,以停止浏览器缓存响应。仅仅因为客户端与 Web 服务器位于同一设备上,这不会阻止浏览器缓存响应(也不会阻止某些代理服务器参与正确的环境)。

jQuery.get('scores.txt', {
    now: jQuery.now()
}, function(data) {
    parseScores(data);
});
于 2012-12-14T10:13:08.373 回答
6

尝试添加cache: false到您的 AJAX 选项:

jQuery.ajax({
    url: 'scores.txt',
    dataType: 'text',
    type: 'GET',
    cache: false,
    success: parseScores
});

jQuery 会自动为每个请求添加一个防止缓存的时间戳。

于 2012-12-14T10:13:40.877 回答
5

像这样在文件名中添加一个cachebuster(例如时间戳)。

jQuery.get('scores.txt?' + (+new Date()), function(data) {
   parseScores(data);
})
于 2012-12-14T10:12:36.410 回答
0

使用缓存破坏器。

JQuery 的 Ajax 方法有一个缓存设置可以为您执行此操作:https ://learntech.imsu.ox.ac.uk/blog/?p=266

如果您不想在单个页面上缓存任何服务器内容,@Peter J 的解决方案是最干净的:https ://stackoverflow.com/a/735101/109941

于 2012-12-14T10:14:38.717 回答