2011-05-22 26 views
4

我正在为Chrome浏览器编写扩展(后来希望移植到Firefox)。该扩展从我的服务器下载一个配置文件 - 一个XML文件通过XMLHttpRequest。我发现的是,它一次下载文件,并且每次后续调用似乎都使用该文件的缓存原始版本。无论我是否更改服务器上的文件都无关紧要。如何避免通过XMLHttpRequest()下载缓存的数据()

我读了你可以尝试

xmlhttp.setRequestHeader( '用法', '缓存控制:无缓存');

所以我已经这样做了,但它似乎没有任何区别。我能得到新文件的唯一方法似乎是删除浏览器缓存 - 显然这不是我成长中的用户的解决方案。

这似乎是一个问题,我不会成为第一个经历过的人 - 所以考虑到缓存规则似乎坚持这一政策是不容易避免的,我的问题是,什么是更好的设计?有没有我不知道的最佳做法?我应该推动而不是以某种方式拉动?

回答

4

一个简单的方法是添加一个包含时间的无用参数给请求。由于时间倾向于前进,永不倒退,您可以合理确信您的查询是唯一的,因此不会被缓存。

例如(假设URL是在一个字符串url):

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

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

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

你甚至不用加“_time ',你可以做'url + ='?' +(new Date())。getTime()' – Midas 2011-05-22 21:53:46

+1

@Midas嗯。你可以调用你喜欢的参数(只要其中一个不存在)。我只是很高兴一些系统管理员被Apache日志弄糊涂了! – lonesomeday 2011-05-22 21:56:19

+0

jQuery中的ajax库使用_(下划线)作为强制“无缓存”的变量参数的名称。请参阅http://stackoverflow.com/questions/168963/stop-jquery-load-response-from-being-cached/168977#168977 – Cheeso 2011-05-23 01:34:33