我们在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询问服务器是否有更新。如果是的话,强制重新装载。如果这是解决我们问题的最好方法:,我们如何实现这个解决方案?,如果您有任何其他可能的解决方案,我们将非常乐意知道它。
谢谢
发布于 2010-10-11 02:25:01
将最后一次更新存储在变量中,并使用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
只是一个返回上一次更新的页面。如何跟踪上一次更新取决于您。
发布于 2010-10-11 04:46:18
IE缓存来自同一个URL的文件,假设您正在从您的html头加载js-文件,您可以尝试在url中随机设置一个查询号,这只是为了迫使IE将其解释为一个新的URL并重新加载它。
示例:
<?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将被迫重新加载它。
https://stackoverflow.com/questions/3904988
复制相似问题