我正在尝试使用PHP与Ajax和JQuery一起构建一个可以写入文本文件的站点,然后让站点将文本文件的内容加载到div中.
这是我正在使用的JQuery代码.
$(document).ready(function() {
setInterval(function() {
$("#text").load("storydoc.txt");
}, 2000);
});
这里是PHP和相关的HTML.
<div id="text">
</div>
<form id="form" method="POST" action="<?PHP echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
<input id="wordinput" class="input" type="text" name="word" maxlength="30"></input>
<input id="submit" class="hidden" type="submit" name="submit"></input>
</form>
<?PHP
if(isset($_POST['submit'])) {
$word = " " . $_POST['word'];
$ret = file_put_contents('text.txt', $word, FILE_APPEND | LOCK_EX);
if($ret === false) {
die("There was an error writing this file");
}
}
?>
所以它的作用是让用户使用#wordinput写入“text.txt”,然后使用.load()更新#text以显示“text.txt”中的新更新文本.然后,其他用户也可以看到并写入该文本.
我遇到的问题是文本文件可以在不同的浏览器上显示不同的内容.例如,如果我在Firefox中打开网站并将某些内容写入text.file,则无法显示.即使我在cPanel文件管理器中找到文件本身,它仍然显示我上网时的文本.如果我打开Chrome并转到该网站,它将在网站和文件管理器上显示新的更新文本.还可以在Chrome网站上立即显示更多单词.同时,即使刷新后,Firefox仍然显示相同的过时文本文件内容.在此之后,它完全适用于所有浏览器,但首先打开文件的人.然后,如果你将文本文件保留未编辑一段时间,我再次遇到同样的问题,不得不切换浏览器.
从Chrome开始,它以相反的方式工作,所以我认为它与特定的webbrowser没有任何关系.对我来说,似乎首先打开“text.txt”的浏览器保存了它的副本,并且只从那里开始使用那个,我不知道如何解决它.
欢迎任何解决方案或想法!先感谢您!
解决方法:
$(document).ready(function() {
setInterval(function() {
var ms = (new Date).getTime(); // epoch time
$("#text").load("storydoc.txt?ms=" + ms ); // add query string
}, 2000);
});
添加的字符串对于实际文件来说是无关紧要的,但每次都会产生请求“new”的影响,因为添加的时间字符串将不同,并且缓存中不会有副本.