我正在将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开始,它的工作方式与其他方法相同,因此,我认为它与特定的网络浏览器无关。在我看来,首先打开“ text.txt”的浏览器似乎保存了它的副本,然后只使用它的副本,而我不知道如何解决它。
欢迎任何解决方案或想法!先感谢您!
在load语句中的文件标题后附加一个时间字符串,以防止缓存-
$(document).ready(function() { setInterval(function() { var ms = (new Date).getTime(); // epoch time $("#text").load("storydoc.txt?ms=" + ms ); // add query string }, 2000); });
添加的字符串与实际文件无关紧要,但是每次都会使请求“新建”,因为添加的时间字符串将有所不同,并且缓存中将不会有副本。