我正在使用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强制浏览器请求文件的新副本?
提前致谢。
答案 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