2

如果图像已在服务器上更新,我想在页面上重新加载图像。在其他问题中,有人建议做类似的事情

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

强制重新加载图像,但这意味着即使它真的没有改变,它也会被再次下载。

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

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

4

2 回答 2

1

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

于 2009-12-14T19:43:59.107 回答
1

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

话虽如此,使用 Ajax 进行缓存可能会很棘手。您可能想查看 Google Groups 上的此线程,因为尝试覆盖浏览器的缓存机制会涉及一些问题。您需要确保您的服务器返回正确的缓存控制标头,以便能够使这样的事情正常工作。

于 2009-12-14T19:54:32.903 回答