Dav*_*ave 8 javascript php ajax chat
我目前有一个基于Ajax的聊天,我试图通过仅在更新发生时加载聊天脚本来简化.因此,如果数据库中没有任何变化,则无需继续加载.
我现在的逻辑说:
setInterval())但是,如果没有任何改变,那么继续调用它似乎相当低效.相反,我想做的是:
但是我怎么会这样呢?我目前使用的功能是:
function updateShouts() {
$('#chatArea').load('chat.php'); // load chat logs
}
setInterval("updateShouts()", 500); // call function every half a second
Run Code Online (Sandbox Code Playgroud)
我会将timestamps(或message_ids)与服务器端脚本发送给客户端的任何聊天消息一起传递。然后客户端简单地请求新消息,服务器只发送新消息。
因此,假设每条聊天消息都有一个 ID。我会设计我chat.php接受这样的参数:
chat.php?since=12345
Run Code Online (Sandbox Code Playgroud)
12345将是id客户端看到的最后一条消息。chat.php本质上是这样的:
SELECT * FROM chatmessages WHERE id > $since
Run Code Online (Sandbox Code Playgroud)
...并传回一个漂亮的小数据结构(一个对象数组,以 JSON 编码,比方说)。
因此,如果没有新的聊天消息,服务器只会传回一个空数组。
我不认为你能比这更有效率。
编辑:
我意识到这样做需要更多的客户端编码。您不再只是用整个聊天记录更新某个 div。您还需要在 ajax 调用上有一个处理程序来迭代结果,并且对于每条消息,以编程方式div为该行构造一个,然后将其附加到您的 chat 中div。
小智 1
如您所知,.load 函数使用 chat.php 文件返回的输出填充元素。这个 .load 函数执行两个步骤:它向 chat.php 发出 ajax 请求,然后将元素的值设置为 chat.php 的输出。你想做的只是第一步。为此,请使用 .ajax 函数
http://api.jquery.com/jQuery.ajax/
我建议不要使用 chat.php 文件,而是调用不同的脚本,例如 isChatUpdated.php。该脚本将按照名称所示执行操作,并检查聊天中是否有任何更改。然后,您可以使用该结果来确定是否需要调用 .load 函数。