如何使用 javascript 或 php 禁用 Internet Explorer 缓存
Posted
技术标签:
【中文标题】如何使用 javascript 或 php 禁用 Internet Explorer 缓存【英文标题】:How to disable internet explorer cache using javascript or php 【发布时间】:2011-10-20 17:12:52 【问题描述】:我有一个带有 javascript 和许多 jax 调用的 php 驱动的应用程序。我的应用程序在 Firefox 中运行最新。但是当我在 internet explorer-8 或类似版本中运行它时,我的 ajax 调用被缓存在我的浏览器中,所以我无法使用 ajax 调用输出最新信息,而是使用旧数据提供 ajax 调用的结果。在浏览器缓存中。
I have tried lots of possible options as listed below
1.) I added following meta tag in header files
<meta http-equiv='cache-control' content='no-cache'>
<meta http-equiv='expires' content='0'>
<meta http-equiv='pragma' content='no-cache'>
2.)我添加了以下php代码
header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Pragma: no-cache');
但上述两种方法仍然没有解决我的问题,即,请任何人帮助我在我的应用程序运行时禁用缓存 Internet Explorer,以便获得最新信息。
提前致谢
【问题讨论】:
使用 HTTP 标头的第二种解决方案应该可以工作。只需确保确实发送了标头(使用 web-sniffer.net),清除浏览器的缓存(文件可能在没有发送标头时被缓存)并再次检查。 我添加了以下 php 代码 -- 在哪个文件中?响应标头应该放在您的 AJAX 脚本中。 @duri 我不相信如果项目已经在缓存中,该解决方案将起作用。我认为您可以使用 javascript => ***.com/questions/2099201/… 进行硬刷新。其余的项目我认为你应该使用类似 filemtime() @Alfred 我知道如果文件已经被缓存,它可能无法工作。这就是我建议清除浏览器缓存的原因。 【参考方案1】:以某种方式使每个 AJAX 请求独一无二。这将阻止 IE 缓存响应。
例如,如果您的正常 AJAX 查询 URL 是 www.mysite.com/ajax.php?dog=cat,则为每个唯一的 AJAX 请求添加一个查询字符串参数:
www.mysite.com/ajax.php?dog=cat&queryid=1
每次发出 AJAX 请求时都增加该参数,这有望为您解决问题。
【讨论】:
是的,我通过将当前时间与秒相加来完成每个 ajax 请求唯一,但我正在寻找一种更好的方法来为我的所有文件和所有请求提供通用解决方案,请任何人帮助我。url + "&rand="+Math.floor(Math.random()*11)
为什么要使用 Math.random 来耗尽处理器时间?一个简单的增量就可以解决问题,而且不会那么浪费。
gowtham - 我想不出比每次发出请求时都简单地附加一个递增的 int 更简单的解决方案。许多 Javascript 库都做类似的事情。
使用 filemtime() => php.net/manual/en/function.filemtime.php.递增也很昂贵,因为您需要通过数据库跟踪计数器。 filemtime() 只是简单的系统调用。最好在文件创建时执行一次!以上是关于如何使用 javascript 或 php 禁用 Internet Explorer 缓存的主要内容,如果未能解决你的问题,请参考以下文章
当数据在javascript codeigniter php中使用ajax成功功能时,如何禁用页面重新加载?
asp.net c#.net jquery / javascript 如何使用复选框启用或禁用 requiredfieldvalidator
使用 JavaScript 如何禁用右键单击或单击滚动条时如何在右键单击窗口中删除检查元素选项