使用Javascript刷新图像,但仅限在服务器上更改

时间:2009-12-14 19:41:40

标签: javascript http http-headers if-modified-since

如果已在服务器上更新了图像,我想在页面上重新加载图像。在other questions中,建议执行类似

的操作
newImage.src = "http://localhost/image.jpg?" + new Date().getTime();

强制重新加载图片,但这意味着即使它尚未更改,它也会再次下载。

是否有任何Javascript代码会导致使用正确的If-Modified-Since标题生成对同一图像的新请求,因此只有在实际更改后才会下载图像?

更新:我仍然感到困惑:如果我只是请求典型的URL,我将获得本地缓存的副本。 (除非我让服务器将其标记为不可缓存,但我不想这样做,因为整个想法是不重新下载它,除非它真的发生了变化。)如果我更改了URL,我会总是重新下载,因为新URL的意思是打破缓存。那么我如何得到我想要的中间行为,即只有当它与本地缓存的副本不匹配时才下载文件?

2 个答案:

答案 0 :(得分:1)

Javascript无法侦听服务器上的事件。相反,您可以使用某种形式的长轮询或顺序调用服务器来查看图像是否已更改。

答案 1 :(得分:1)

您应该查看xhr.setRequestHeader()方法。它是任何XMLHttpRequest对象的方法,可用于在Ajax查询上设置标头。在jQuery中,您可以轻松地将beforeSend属性添加到您的ajax对象并在那里设置一些标题。

话虽如此,使用Ajax进行缓存可能会非常棘手。您可能希望查看Google网上论坛上的this thread,因为尝试覆盖浏览器的缓存机制涉及一些问题。您需要确保您的服务器返回正确的缓存控制标头,以便能够使这样的东西工作。