jQuery.get在服务器上没有收到最新版本的文件

时间:2012-12-14 10:10:29

标签: javascript apache jquery

  

可能重复:
  Prevent caching of AJAX call

我正在使用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 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:3)

将cachebuster(例如时间戳)添加到文件名中,如下所示。

jQuery.get('scores.txt?' + (+new Date()), function(data) {
   parseScores(data);
})

答案 3 :(得分:0)

使用缓存破坏程序。

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

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