文件更改后的刷新页面
我希望javascript在对服务器上的页面文件进行修改时刷新页面。文件更改后的刷新页面
我使用api.php(见下文)获取文件的文件修改时间并将其作为json返回。
因此,从api.php获取数据是没有问题的,但是如何将旧值与JavaScript中的新值进行比较并刷新页面(如果是这种情况)。
这是我迄今所做的:
var oldVar = 0;
setInterval(function(){
$.getJSON('api.php', function(data) {
console.log(data);
var obj = data;
var filedate = obj.filedate;
if (oldVar != filedate) {
location.reload();
};
var oldVar = filedate;
});
}, 1000); // 1 second
显然,这使得页面每秒刷新一次,但我不知道如何着手。
下面是我用来获取数据的PHP代码,我使用filemtime来检查服务器上的文件修改时间。
<?php
$filename = "test.php";
if (file_exists($filename)) {
$dateFile = date("s", filemtime($filename));
$dateOfFile = array('filedate' => "$dateFile");
echo json_encode($dateOfFile);
}
?>
的JavaScript
var interval = setInterval(function(){
$.getJSON('api.php', function(data) {
if (getCookie('old_modification') != data.filedate) {
window.location.reload();
};
setCookie('old_modification', data.filedate);
});
}, 1000);
function setCookie(name, value) {
var cookie_string = name + "=" + encodeURI(value);
document.cookie = cookie_string;
}
function getCookie(cookie_name) {
var results = document.cookie.match('(^|;) ?' + cookie_name + '=([^;]*)(;|$)');
return results ? unescape(results[2]) : null;
}
if(getCookie('old_modification') === null) {
setCookie('old_modification', 0);
}
PHP
$filename = "test.php";
if (file_exists($filename)) {
echo json_encode(array(
'filedate' => filemtime($filename)
));
}
既然你每次重新加载页面时,oldVar
值始终设置为0
,并没有采取当您使用从定时器中的AJAX接收到的数据检查其值时会起作用。
在这里,您需要一些存储来保存和更新旧值。我更喜欢使用cookie来达到这个目的。除了另一个更新页面的某个部分而不是重新加载页面本身之外,我没有别的选择。
我已经使用this引用来使用JavaScript获取和设置cookie,因为它比我的简单和容易,并根据您的要求做了一些更改。
回到PHP部分,我不确定为什么在date
函数中使用s
格式。它只会从文件的修改时间中获得几秒钟的时间,因为某些时刻秒数可能相同。例如,您在11:30:50修改文件并在11:31:50再次修改文件,并且在重新加载页面时不会生效。另外,我知道这是非常罕见的情况。尽管如此,单独坚持使用filemtime
,因为它返回unix时间戳,并且不会随时更新。
希望它有帮助!
您使用date("s", ...)
刚刚返回的时间的秒数部分 - 即现在它是我的时区11时42分16秒,这样就会返回值"16"
。你想要的是自纪元以来的总秒数,你可以用date()
函数得到它,但使用time()
会更容易,它会返回一个整数。
同样在你的JS代码中,你正在用var
重新定义变量 - 不要这样做。 :)
关于时间()和日期()部分,在这种情况下确实没有关系。它按预期工作。我精确地保存文件的机会非常渺茫。 PHP部分不是问题。 另外我不知道我是如何设法解决这个问题,但纠正了错误。 – Niels
我会建议做的计算和处理重定向在PHP而不是客户端 – RamRaider
是你的问题,oldVar总是0,而不是你的新值oldVar? – Hokusai
@hokusai感谢您的回复,不,这不是问题,我想要的只是在页面修改完成后刷新页面。 刷新后api.php返回一个json值,只要我做一个改变test.php就会改变。我想javascript每秒钟检查一次这个页面。当它看到一个更改时,我希望它触发刷新。 – Niels