我如何在不刷新php的情况下打开,读取,关闭,更新,重新打开和读取文件

时间:2019-06-04 20:01:52

标签: javascript php html

我正在尝试使用html和php制作聊天应用程序。

我正在编写一个包含整个聊天内容的.txt文件,并且希望每五秒钟阅读一次,而无需刷新页面。我尝试在javascript中使用循环,但在再次打开文件后不会刷新文件。

Reflection

这是我到目前为止尝试过的。

1 个答案:

答案 0 :(得分:1)

您遇到的问题是由于混合使用PHP和Javascript代码。

首先,您应该知道PHP代码在服务器上执行,该服务器生成将发送到客户端(Web浏览器)的页面内容。然后,该Web浏览器将执行其收到的页面内容中包含的Javascript代码。

您已经看到聊天不更新的原因了吗?

当请求页面时,您的PHP函数仅执行一次,并将聊天消息插入readChat()函数的主体中。当浏览器收到包含readChat()的网页数据时,它只会看到聊天消息,就好像它们是硬编码到函数中一样!

例如,以下PHP脚本:

function someJSFunc() {
    <?php
        $now = date('m/d/Y H:i:s', time());
        echo "var now = '$now';";
    ?>
    console.log(now);
}

结果将以下功能发送给客户端:

function someJSFunc() {
    var now = '6/4/2019 16:39:18';
    console.log(now);
}

无论客户端调用someJSFunc()多少次,它都会始终输出相同的日期和时间,因为那是PHP函数执行的时间。

有时以这种方式混合使用PHP和Javascript可能非常有用,但是要完成您要查找的内容,您将需要使用AJAX请求。

使用JQuery可以轻松完成AJAX请求。您需要做的就是在页面标题中添加另一个<script>标记以包含JQuery脚本。可以在其网站上找到有关设置JQuery的更多说明。

接下来,您必须修复readChat()函数。不用在该函数中使用PHP,只需使用javascript并使用JQuery执行GET请求即可。

function readChat() {
    clearArea();
    $.get("getchat.php", function(data) {
        // inside this function data will contain whatever your PHP script echos
        $('#chat').html(data);    // for example, replacing a div with id="chat" with the data received from getchat.php
    });
    window.setInterval(function() { readChat(); }, 5000);  // I would personally move this outside of readChat() so that it is only called once...
}

每次浏览器调用getchat.php时,此函数将加载readChat(),并设置一个间隔,每5秒调用一次readChat()$.get()中的函数是您可以使用从getchat.php接收的数据的地方。通常,它只是一个字符串,您可以将其插入到聊天区域或div中,但这取决于如何使getchat.php脚本起作用。

最后,您仅制作了一个名为getchat.php的新PHP脚本,它将读取聊天文件并以您希望看到的格式将其回显到页面中。