小编典典

Webbrowser不会显示txt文件的更新版本,但是打开新的浏览器会显示正确的文件

ajax

我正在将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”的浏览器似乎保存了它的副本,然后只使用它的副本,而我不知道如何解决它。

欢迎任何解决方案或想法!先感谢您!


阅读 251

收藏
2020-07-26

共1个答案

小编典典

在load语句中的文件标题后附加一个时间字符串,以防止缓存-

$(document).ready(function() {
    setInterval(function() {
        var ms = (new Date).getTime(); // epoch time
        $("#text").load("storydoc.txt?ms=" + ms ); // add query string
    }, 2000);
});

添加的字符串与实际文件无关紧要,但是每次都会使请求“新建”,因为添加的时间字符串将有所不同,并且缓存中将不会有副本。

2020-07-26