我们在PHP中有一个应用程序。当我们在此应用程序中进行更新和更改时,问题就出现了。有时,由于浏览器缓存,用户无法获取应用程序的最新版本(HTML和javascript主要更改)。一旦我们意识到这一点,我们就可以在我们的应用程序中包含下一个代码(我们在将任何HTML发送到浏览器之前执行它)
function clean_cache(){
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" );
header("Cache: no-cache");
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
}
但是我们仍然有一些用户使用旧版本的应用程序。 我们读到一个可能的解决方案是使用javascript通过ajax询问服务器是否有更新。如果是这样,强制重新加载。如果这是解决问题的最佳方法:我们如何实施此解决方案?如果您有任何其他可能的解决方案,我们将非常乐意了解它。
由于
答案 0 :(得分:0)
将最后一次更新存储在变量中,并使用ajax每分钟执行一次ajax请求,并检查更新时间是否与变量中存储的更新时间不同。如果是这样,重新加载window.location =“新位置”;
编辑:
它应该如下所示: (但我没有测试它所以我不保证它能工作)
var updateTime = '<?php echo $lastUpdateTime;?>';
$(document).laod(function(){
var reload = window.setInterval("request()", 60000);
});
function request(){
$.get("last_update.php", function(data){
if(updateTime != date) window.location = "redirect_to.php";
});
}
编辑2: 这是包含jquery的HTML:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
此"redirect_to.php"
是您将窗口重定向到的文件。所以,如果你想留在同一个网站,只需将网站的网址放在那里。
<?php $lastUpdateTime;?>
有点内联PHP。我将其更正为<?php echo $lastUpdateTime;?>
last_update.php
只是一个返回上次更新的页面。你如何跟踪上次更新取决于你。
答案 1 :(得分:0)
IE缓存来自同一网址的文件,假设您正在从html标头加载js文件,您可以尝试在网址中随机化查询编号,只是为了强制IE将其解释为新网址并重新加载它
示例:
<?php
$random = rand(1, 100000);
?>
<head>
<script type="javascript/text" src="../js/foo.js?v=<?php echo $random;?>"></script>
</head>
...
这将输出类似
的内容<script type="javascript/text" src="../js/foo.js?v=5"></script>
如果你确定URL是“动态的”,IE将被迫重新加载它。