如何使用JavaScript或PHP禁用Internet Explorer缓存

6
我有一个由PHP、JavaScript和许多Jax调用组成的应用程序。 在Firefox中,我的应用程序一直在工作。 但是,当我在Internet Explorer-8或类似版本中运行它时,我的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),清除浏览器缓存(在没有发送头部时可能已经缓存了文件),然后再次检查它。 - duri
我添加了以下 PHP 代码 - 在哪个文件中?响应头应该放在你的 AJAX 脚本中。 - Salman A
@duri 我不相信如果一个项目已经在缓存中,那么这个解决方案会起作用。我认为你可以使用JavaScript进行硬刷新 => https://dev59.com/OHI95IYBdhLWcg3w5iY4#2099205。其余的项目我认为你应该使用类似filemtime()的版本控制方式。 - Alfred
@Alfred 我知道如果文件已经被缓存可能无法起作用。这就是为什么我建议清除浏览器缓存的原因。 - duri
1个回答

9
使每个AJAX请求在某种程度上保持独特,这将防止IE缓存响应。
例如,如果您正常的AJAX查询URL是www.mysite.com/ajax.php?dog=cat,请为每个AJAX请求添加一个唯一的查询字符串参数:
www.mysite.com/ajax.php?dog=cat&queryid=1
每次进行AJAX请求时都递增该参数,这样就可以解决问题了。

是的,我已经通过添加当前时间和秒数使每个Ajax请求唯一,但我正在寻找一种更好的方法来获得适用于所有我的文件和所有请求的通用解决方案。请问有人可以帮忙吗? - gowtham kumar
1
url + "&rand="+Math.floor(Math.random()*11) - Lawrence Cherone
为什么要使用 Math.random 浪费处理器时间呢?一个简单的增量就可以完成任务,而且不会浪费资源。 - James
我也遇到了同样的问题,你能给我解决方案吗?缓存问题只在IE中的ajax链接上出现。非常感谢你。 - Usman Ali
使用 Math.random() 对我有用(不使用 Math.floor() 或其他任何东西)。 我无法递增,因为有时IE会在页面加载之间保留缓存(擦除我的本地变量),因此我需要一种在页面加载之间工作的生成唯一字符串的方法。 我使用 !!document.documentMode 检测IE,因此性能成本只影响IE,如果人们想要流畅的在线体验,他们不应该使用IE。 - intcreator
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接