Javascript 通过XMLHttpRequest()下载时如何避免缓存数据

Javascript 通过XMLHttpRequest()下载时如何避免缓存数据,javascript,html,google-chrome,Javascript,Html,Google Chrome,我正在为Chrome浏览器编写一个扩展(后来希望移植到Firefox)。扩展从我的服务器下载一个配置文件——一个通过XMLHttpRequest的xml文件。我发现它只下载了一次文件,随后的每次调用似乎都使用了文件的原始缓存版本。我是否更改服务器上的文件并不重要 我听说你可以试试 setRequestHeader('Pragma','Cache Control:no Cache') 所以我这么做了,但似乎没有什么区别。我获取新文件的唯一方法似乎是删除浏览器缓存——这显然不是我不断增长的用户的解决

我正在为Chrome浏览器编写一个扩展(后来希望移植到Firefox)。扩展从我的服务器下载一个配置文件——一个通过XMLHttpRequest的xml文件。我发现它只下载了一次文件,随后的每次调用似乎都使用了文件的原始缓存版本。我是否更改服务器上的文件并不重要

我听说你可以试试

setRequestHeader('Pragma','Cache Control:no Cache')

所以我这么做了,但似乎没有什么区别。我获取新文件的唯一方法似乎是删除浏览器缓存——这显然不是我不断增长的用户的解决方案


这似乎是一个我不会第一个遇到的问题——因此,考虑到缓存规则似乎坚持这是一项无法轻易避免的政策,我的问题是,什么是更好的设计?有没有我不知道的最佳实践?我应该推而不是拉吗

一个简单的方法是在请求中添加一个包含时间的无用参数。由于时间趋向于向前而不是向后,因此您可以合理地确定您的查询是唯一的,因此不会被缓存

例如(假设URL是字符串
URL
):

或者,如果您的URL已经有查询参数

url += '&_time=' + (new Date()).getTime();

您甚至不必添加“_time”,只需执行
url+=”?“+(新日期())。getTime()
@Midas是的。您可以随意调用该参数(只要一个参数还不存在)。我只是对一些被Apache日志弄糊涂的系统管理员表示友好!jQuery中的ajax库使用z(下划线)作为强制“无缓存”的变量param的名称。看见
url += '&_time=' + (new Date()).getTime();