JS / AJAX浏览器缓存问题

时间:2010-09-17 08:42:20

标签: javascript ajax browser caching

我正在一家带有计算器的电子商店来计算您的贷款。我需要一些新的见解...想象一下这种情况:

  1. 用户点击其中一个按钮,它将执行POST请求(jQuery)并填写所需数据。
  2. 用户点击添加到购物车并转到购物车
  3. 用户点击返回按钮(浏览器)
  4. 页面正在加载,服务器正在填充计算器中的数据(默认),但完成后,浏览器会从缓存中填充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。

3 个答案:

答案 0 :(得分:1)

如果你想处理后退/前进按钮,一种方法是使用jb的bbq插件,它能够修改网址的#部分。

因此,您将能够连接到后退/前进事件,并完全控制执行的内容和时间,解除您需要的任何Ajax请求。

这意味着你必须改变页面流的概念 - 不能直接发布到服务器,只能通过ajax,+客户端通过一些模板机制进行渲染。

这有点像新兴趋势,例如谷歌的即时搜索。

答案 1 :(得分:0)

为所有ajax查询添加虚拟参数'&t='+new Date().getTime(); 这将确保每次都发送新的请求。

答案 2 :(得分:-3)

通过一点点黑客解决它,因为它看起来像纯粹的浏览器问题。