我正在一家带有计算器的电子商店来计算您的贷款。我需要一些新的见解...想象一下这种情况:
页面正在加载,服务器正在填充计算器中的数据(默认),但完成后,浏览器会从缓存中填充JS数据并发生一件有趣的事情。数据合并,当用户将产品添加到购物车时,他会出错,但价格有效。有效部分是服务器填充的内容,其余部分来自缓存。
我尝试过使用meta标签来阻止缓存,我告诉jquery 不缓存POST请求,甚至在我的响应者中,我有多个标题说 - DO NOT CACHE < / strong>即可。然而,POST数据仍然被缓存,我不知道如何关闭它或刷新它或其他......当我查看带有json数据的标题时,标题 expires 被设置到了2099年,即使我说它应该是过去的一年。除此之外,我真的不知道是什么导致了这个问题。
以下是在响应者中设置的标题以及返回的内容:
header("Expires: Mon, 26 Jul 1999 05:00:00 GMT" );
header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" );
header("Cache-Control: no-cache, must-revalidate" );
header("Pragma: no-cache" );
header("Content-type: text/x-json");
这回来了(来自萤火虫):
Date Fri, 17 Sep 2010 08:39:38 GMT
X-Powered-By PHP/5.1.6
Connection Keep-Alive
Content-Length 126
Pragma no-cache
Last-Modified Fri, 17 Sep 2010 08:39:38GMT
Server Apache
Content-Type text/x-json
Cache-Control no-cache, must-revalidate
Expires Mon, 26 Jul 2099 05:00:00 GMT
注意:当我在浏览器偏好设置中禁用缓存时,它就像魅力一样。
欢迎任何想法!
编辑:
我几个小时前尝试过这个假人,但这并没有解决它。简单来说,整个问题是,当用户点击后退按钮时,页面不会刷新,但是从缓存中读取,或者至少来自ajax的数据会被缓存并被填充。
所以基本上我需要在用户点击后退按钮时以智能方式刷新页面。请注意,cookie不是一种选择,因为(可能是一小部分,但仍然)某些人不允许使用cookie。
答案 0 :(得分:1)
如果你想处理后退/前进按钮,一种方法是使用jb的bbq插件,它能够修改网址的#部分。
因此,您将能够连接到后退/前进事件,并完全控制执行的内容和时间,解除您需要的任何Ajax请求。
这意味着你必须改变页面流的概念 - 不能直接发布到服务器,只能通过ajax,+客户端通过一些模板机制进行渲染。
这有点像新兴趋势,例如谷歌的即时搜索。
答案 1 :(得分:0)
为所有ajax查询添加虚拟参数'&t='+new Date().getTime();
这将确保每次都发送新的请求。
答案 2 :(得分:-3)
通过一点点黑客解决它,因为它看起来像纯粹的浏览器问题。