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

Jam*_*mes 5 javascript apache jquery

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

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

jQuery.get('scores.txt', function(data) {
    parseScores(data);
});
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

提前致谢.

Mat*_*att 6

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

jQuery.get('scores.txt', {
    now: jQuery.now()
}, function(data) {
    parseScores(data);
});
Run Code Online (Sandbox Code Playgroud)


Ble*_*der 6

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

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

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


Dzi*_*owy 5

像这样向文件名添加缓存消除器(例如时间戳)。

jQuery.get('scores.txt?' + (+new Date()), function(data) {
   parseScores(data);
})
Run Code Online (Sandbox Code Playgroud)