1

我已经提供了一些代码来实时进行 ajax、php、mysql 聊天......这是我的代码:

-jQuery/Ajax

$(function(){
    setInterval(function() {
    $('#chMsgCont').load('./ajax/msg.php');
       var div = $('#chMsgCont');
         var o = div.offset().top;  

   div.scrollTop( o + 12302012 );
    }
    ,1000);
});

“./ajax/msg.php”

<?php
include("../system/config.site.php");
$query = mysql_query("SELECT * FROM chat_msg ORDER BY timestamp ASC");
while($p = mysql_fetch_assoc($query)) {
    $auth = mysql_fetch_assoc(mysql_query("SELECT * FROM chat_users WHERE id = '".$p['auth_id']."'"));
?>
<div class="chatMsg">
<p id="chatPMsg">
<span class="chatTime"><?php echo date("H:i", $p['timestamp']); ?></span>
<b><?php echo $auth['name']." ".$auth['surname']; ?></b><br />
<?php echo stripslashes($p['msg']); ?>
</p>
<p id="chatImg">
<img src="./images/thumb<?php echo $p['auth_id']; ?>.png" />
</p>
<div style="clear:both;"><!– –&gt; </div>
</div>
<?php
}
?>

我还没有找到任何不每秒加载“msg.php”文件的方法...我想:是否可以首先加载消息,然后使用 setIntervall 检查要附加到#chMsgCont 的新消息?我认为这是可能的,但我不知道如何编码:/,有人可以帮助我吗?

4

1 回答 1

1

是的,可以在初始页面加载时加载所有消息;然后随后用新消息更新聊天窗口(您有没有想过 Gmail 如何在不刷新页面的情况下自动将新邮件填充到您的收件箱中?大量的 AJAX 请求)。

你在正确的轨道上。只需确保您的 MySQL 数据库中有一个列,该列包含关于它是否是新消息的“是/否”值。然后每次使用 ajax/msg.php 获取新消息时,除了获取和输出内容外,还执行 SQL 更新以更新获取的数据。

一旦你有了这个工作,你可以通过创建一个更简单的 MySQL SELECT 语句来进一步优化你的聊天应用程序,该语句只检查“新”行的计数(SELECT COUNT(new_message) FROM 消息)。然后在尝试追加内容之前检查返回的值以及它是否大于 0。我还会检查 JavaScript 中的空返回数据,以防止不必要地操作 DOM 元素。

于 2012-08-08T00:53:49.003 回答