我有一个网络应用程序。使用AJAX(通过jQuery)。我注意到有些用户通过$.get
进行了应该在网页上自动更新的更新,但在某些情况下不会发生更新。我把问题缩小到了
A. A race condition or B. Caching
我无法在浏览器,IE7和FF7上重现问题。我去了用户的机器,让他们在IE7中检查the setting到“检查页面的新版本:每次访问”。问题似乎消失了。所以,我有信心问题是这个设置,最初设置为“自动”。
其他浏览器是否支持此“缓存”(或者技术翻译)?
当代码明确地发出服务器调用时,任何想法为什么IE7不够聪明,不能让AJAX $.get()
请求不?我的意思是,是否存在已知错误或这是一个“功能”?
是否可以在不翻转客户端设置的情况下禁用它?
答案 0 :(得分:4)
我想我应该从评论转到答案。
this stack overflow question涵盖了让JQuery为您禁用缓存的方法。
是的其他浏览器缓存,我不知道任何不支持缓存的常见浏览器。但是,用户如何为此设置偏好有一些变化。
我认为缓存应该被认为是一个功能,因为它只是在发出一个get请求,但老实说我不知道标准是否能解决这个问题。
如果不翻转客户端设置,则无法禁用它,但最简单的方法是确保它没有看到相同的URL两次,因此无法缓存它。如果你将cache参数设置为false,这实际上就是JQuery内部所做的事情。
您可以通过标头控制缓存,但我不认为所有浏览器都支持此功能。我相信现在永远不会重复URL是唯一可靠的跨浏览器解决方案。
答案 1 :(得分:2)
您可以将Cache-Control HTTP标头设置为no-cache。这将导致浏览器始终向服务器发出请求。 IE和其他所有浏览器都会像对待任何其他请求一样处理源自javascript的HTTP请求。
答案 2 :(得分:1)
如果$.get()
的查询字符串相同,则它是相同的URL,浏览器将返回缓存,这是正确的。如果您想确保始终获取新副本,请在$.get()
中将带有时间戳的伪造查询字符串参数附加到该网址。