情况: 我正在使用php和AJAX读取.txt文件的内容我将内容加载到div中。 javascript每5秒检查一次.txt文件并将内容放入div中。 如果.txt文件的内容发生更改(我使用表单提交),则div的内容会在5秒后自动更改。 为了这;我使用一个带有3个选项的复选框: 状态:可用 状态:忙碌 状态:已暂停
上面3行中的一行是在.txt文件中。 现在的情况:每隔5秒检查一次.txt文件,每隔5秒刷新一次div。如果.txt文件的内容没有改变,是否有可能保持刷新?
我怎样才能实现这个目标?
在javascript下面:
function Ajax()
{
var
$http,
$self = arguments.callee;
if (window.XMLHttpRequest) {
$http = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
$http = new ActiveXObject('Msxml2.XMLHTTP');
} catch(e) {
$http = new ActiveXObject('Microsoft.XMLHTTP');
}
}
if ($http) {
$http.onreadystatechange = function()
{
if (/4|^complete$/.test($http.readyState)) {
document.getElementById('ReloadThis').innerHTML = $http.responseText;
setTimeout(function(){$self();}, 5000);
}
};
$http.open('GET', 'loadtxt.php' + '?' + new Date().getTime(), true);
$http.send(null);
}
}
Loadtxt.php
<?php
//
$file = "status.txt";
$f = fopen($file, "r");
while ( $line = fgets($f, 5000) ) {
echo $line;
}
?>
div:
<script type="text/javascript">
setTimeout(function() {Ajax();}, 5000);
</script>
<div id="ReloadThis">Default text</div>
答案 0 :(得分:2)
计算服务器端文件的HASH,用你的AJAX检查哈希值(比如一个SHA1或MD5) - 如果自上次查看后哈希值发生了变化,那么只更新DIV?
也许服务器上的这个PHP函数可以帮助吗?
string hash_file ( string $algo , string $filename [, bool $raw_output = false ] )
我在此链接中找到了http://php.net/manual/en/function.hash-file.php
所以这样的事情(我无法测试这个;所以非常欢迎编辑):
filehash.php:
<?php
$file = "status.txt";
echo hash_file( "SHA1", $file, $raw_output=false )
?>
设置一个Javascript变量,例如&#39; fileHash&#39;:
var fileHash;
使用对新PHP脚本的AJAX调用填充:
[...]
$http.open('GET', 'filehash.php' , true);
newFileHash=$http.responseText;
if (fileHash!=newFileHash) { // file changed - so fetch contents
[...]
// check me here: can we just make use of $http twice here ?
$http.open('GET', 'loadtxt.php' + '?' + new Date().getTime(), true);
// update div.
document.getElementById('ReloadThis').innerHTML =$http.responseText;
fileHash=newFileHash;
}
setTimeout(function(){$self();}, 5000);
[...]
替代建议:
您的网络服务器可能会自动返回一个HTTP代码,表明该文件自上次请求后没有更改(通过与您的浏览器标头进行比较) - 例如使用HTTP 304:
304未修改 表示自请求标头If-Modified-Since或指定的版本以来未对资源进行修改 如果 - 无 - 匹配。这意味着没有必要重新发送 资源,因为客户端仍然有以前下载的副本。
看起来你已经为你的GET请求添加了一个timestamp参数 - 我认为这是阻止你的浏览器缓存文本文件的旧副本:如果你选择上面的方法,你应该从你的GET请求中删除它 - 因为这会在网络服务器上显示您每次都要求提供新文档。