用php/js-can'在IE中加载动态报价;似乎没有覆盖缓存

Loading dynamic quote in IE with php/js - can't seem to override the cache

本文关键字:缓存 覆盖 动态 js-can php IE 加载      更新时间:2023-09-26

我已经设置了一个基本脚本,它将随机引用加载到网页中,从php文件中的列表中提取引用。它在Firefox和Safari中运行良好,但在Internet Explorer中,用户总是看到相同的报价,刷新页面不会更改报价。

我已经将其缩小到IE中的缓存问题,因为当我进入IE 9中的F12 Developer工具并将缓存设置为始终从服务器刷新时,问题就消失了。然而,我希望网站的访问者看到一个不断变化的报价。

我尝试将此添加到页头,但没有成功:

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

我还看到了这个问题:如何阻止js文件缓存在IE中?我在保存脚本的.js文件中添加了一个时间戳,但这并没有改变任何内容。

我可能还缺少什么?js文件非常简单:

$j(document).ready(function() {
$j("#quoteContainer").load("/quote_generator.php", "quote=emotion");
});

报价生成器经过简化,获得报价的类型(在本例中为情感)并显示它:

$quotes[] = 'emotion quote.';
$quotes[] = 'emotion quote2.';
$random_number = rand(0,count($quotes)-1);
echo $quotes[$random_number]; 

它是否也可能缓存PHP文件或其输出?当然,当我调整php文件时,直到我清除IE缓存,更改才会显示出来?

也许给它一个nonce:

$j(document).ready(function() {
   $j("#quoteContainer").load("/quote_generator.php", {quote: "emotion", nonce: new Date().getTime()});
});

(时间戳不是世界上最好的nonce,但它是一个简单的例子。)您的服务器代码会忽略该参数,但它会使URL在浏览器缓存中看起来是唯一的。

编辑—对不起,我已经有一段时间没有使用.load()了;如果您想坚持使用HTTP"GET"请求,您必须将args作为字符串提供(imo,这有点像jQuery方面有问题的API设计,但无论如何):

$j(document).ready(function() {
   $j("#quoteContainer").load("/quote_generator.php", "quote=emotion&nonce=" + new Date().getTime());
});