实时更新聊天列表(在新消息上)

时间:2018-04-30 13:02:19

标签: php html ajax

**编辑:这更像是一个HTML问题,因为我已经掌握了所有内容,但如何更改HTML以实现我的目标:

我制作了一个聊天系统,显示顶部任何聊天的最后消息(很像WhatsApp)。问题是,如果有新消息,它不会自动更新,但只有在刷新页面时才会更新。 主要的3个文件是:chat_box.phpchat_handler.phpview_chats.php

chat_box.php - 是包含聊天框的文件,用户在其中输入消息并使用以下方式提交:

$.post('chat_handler.php?action=sendMessage&message=' + message, function(response){

});

然后chat_handler.php依次获取消息并进行简单的SQL查询以将消息输入数据库。

第三个文件view_chats.php是显示每个聊天记录的列表,其中包含最后一条消息,如下所示:

//SQL query here to fetch last message from each chat (Ordered by the last message)
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {  //echo chats and last messages
    echo "<p><strong>$row['name']</strong></p><br/>"
        ."<p>$row['message']</p>"
        ."<hr/>"
}

现在view_chats.php会正确显示列表,但如果有新消息则不会实时更新。需要页面刷新才能查看新消息。 收到新邮件后,我该怎么做才能更新? 显然,我需要在chat_handler.php的AJAX请求中添加一些内容,以告知消息何时成功输入数据库,但实时更新它们的方法是什么?我的意思是始终将最新消息放在顶部,将前一条消息放在它下面

1 个答案:

答案 0 :(得分:0)

AJAX的主要思想是,它是异步的。这意味着不依赖于刷新数据库的当前状态。

这意味着您要添加到数据库的任何信息,您还需要“手动”添加到聊天窗口。为此,请创建一个JavaScript文件,只要进行此AJAX调用,就会调用该文件。

然后,这个JavaScript文件应该将新消息的内容添加到聊天窗口中,同时您仍然保留旧的php文件,该文件写入数据库。即你应该通过JS为你的新消息创建HTML代码。

PHP文件更改数据库,而JS文件更改客户端视图。客户端和服务器端变为异步。一般来说,我建议你多读一些关于AJAX的内容。