【问题标题】:How to stop Internet Explorer caching AJAX pages如何停止 Internet Explorer 缓存 AJAX 页面
【发布时间】:2011-08-01 06:08:35
【问题描述】:

我没有使用 JQuery 或任何其他库。我只是有一个 PHP 文件,它会输出一个 JSON 结果,我的 javascript 会做出相应的反应。

不幸的是,我刚刚花了一个小时将头撞在墙上,试图弄清楚为什么我在我设置的一个变量中得到一个“未定义”知道它在我的 php 输出中。

我终于想通了:我直接进入 IE 中的 php 页面,发现它有一个缓存结果(即,在我将该变量添加到 JSON 字符串之前)。当我点击刷新时,它得到了新页面,我的代码突然开始工作了。

我如何强制 IE(和其他浏览器)不缓存我的 AJAX 页面,因为它们可能会非常频繁地更改?

【问题讨论】:

  • jQuery 通过向 URL 添加动态参数解决了这个问题。例如。 mysite.com/page.php?parm1=val1&parm2=val2&_nocache=213324933.

标签: php ajax internet-explorer browser-cache


【解决方案1】:

为您的请求添加时间戳或随机的东西

使用 POST 代替 GET

【讨论】:

  • http 动词(POST 或 GET)应该与您的请求意图相关。例如,如果请求获取的信息没有预期的副作用,那么我们应该 GET。见w3.org/Protocols/rfc2616/rfc2616-sec9.html。但是,出于安全原因,应使用 POST 检索 json 数组。
【解决方案2】:

通常的方法是在有问题的 URL 上附加一个时间戳,例如

var url += url.indexOf("?") == -1 ? "?" : "&";
url += "_=" + new Date().getTime();

【讨论】:

  • 谢谢!我已将"&_=" + new Date().getTime() 附加到我的所有 AJAX 请求中。
【解决方案3】:

为响应设置适当的过期标头或向请求添加随机或时间戳假参数。

【讨论】:

    【解决方案4】:

    按照其他人的建议,在 URL 后面附加时间或使用以下内容:

    var rand = Math.floor(Math.random()*10000);
    
    url = page.php?v=var&r=rand;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 2013-06-24
      • 1970-01-01
      • 2015-09-02
      • 2011-02-08
      • 1970-01-01
      • 2014-11-19
      相关资源
      最近更新 更多