我已经设置了一个基本脚本,它将随机引用加载到网页中,从php文件中的列表中拉出引号。它在Firefox和Safari中运行良好,但在Internet Explorer中,用户始终看到相同的引用,刷新页面不会更改引号。
我已将其缩小到IE中的缓存问题,因为当我进入IE 9中的F12开发人员工具并将缓存设置为始终从服务器刷新时,问题就消失了。但是,我希望网站的访问者看到不断变化的报价。
我尝试将此添加到页面标题中,但没有运气:
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");
我也看到了这个问题:How do I stop js files being cached in 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缓存?
答案 0 :(得分:1)
也许给它一个随机数:
$j(document).ready(function() {
$j("#quoteContainer").load("/quote_generator.php", {quote: "emotion", nonce: new Date().getTime()});
});
(时间戳不是世界上最好的nonce,但它是一个简单的例子。)您的服务器代码将忽略该参数,但它会使URL看起来对浏览器缓存而言是唯一的。
编辑 - 抱歉,我使用.load()
已经有一段时间了;如果你想坚持使用HTTP“GET”请求,你必须将args作为一个字符串给出(对于jQuery而言,这是一个有问题的API设计,但无论如何):
$j(document).ready(function() {
$j("#quoteContainer").load("/quote_generator.php", "quote=emotion&nonce=" + new Date().getTime());
});