检查是否有带ajax的新消息

时间:2012-08-08 00:44:34

标签: php jquery ajax

我已经提供了一些代码来实时进行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;"><!– –> </div>
</div>
<?php
}
?>

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

1 个答案:

答案 0 :(得分:1)

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

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

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