收到新消息时显示聊天窗口

时间:2014-02-06 08:26:48

标签: php jquery

我正在尝试构建聊天系统。问题是当一个用户将消息键入另一个用户时,聊天窗口将不会立即显示该消息给接收者。只有在接收器刷新窗口后,一切正常。这是我目前的代码:

profile.php

setInterval(function(){
    var username="<?php echo $username; ?>";
    $.ajax({
        url:"s/shower.php",
        type:"POST",
        data:"shower=" + username,
        success:function(data){
                if (data == 1){
                    $(".pchat").show();
                }
        }
    });
},500);

$(".chat_wind").click(function(){
    var id=$(this).attr("id");
    var newid=id.split("chat_wind");
    var datid=newid[1];

    $(".pchat").show();

});


$(".chatform").submit(function(){
    var parent=$(this).attr("id");
    var split=parent.split("chatform");
    var newid=split[1];

    var val=$("#chati").val();
    if (val.length == 0){
        return false;
    }

    $.ajax({
        url:"s/log.php",
        type:"post",
        data:"newid=" + newid + "&txt=" + val,
        success:function(data){
            setInterval(function(){
                $.ajax({
                    url:"s/chat.php",
                    type:"post",
                    data:"username=" + newid,
                    success:function(w){

                        var objDiv = document.getElementById("cbody");
                        objDiv.scrollTop = objDiv.scrollHeight;
                        $("#cbody").html(w);
                    }
                });
            },500);
        }
    });

    $("#chati").val("");
    return false;
});

chat.php

<?php
    include "db.php";
    include "timeago.php";

    if (isset($_POST['username'])){
        $username=$_POST['username'];
        $dat='';
        $sql=mysql_query("SELECT * FROM chat where uchated='$username' ORDER BY time asc");
        while($row=mysql_fetch_array($sql)){
            $time=$row['time'];
            $txt=$row['text'];

            $dat.="
                <div id='msg'>
                $txt <div id='ctime'></div>
                </div>";

        }
        echo $dat;
    }

?>

shower.php

<?php
    include "db.php";
    if (isset($_POST['shower'])){
        $shower=$_POST['shower'];

        $sqlara=mysql_query("SELECT * FROM chat where uchated='$shower'");

        $numara=mysql_num_rows($sqlara);

        if ($numara == 0){
            echo "0";
        }else{
            echo "1";
        }
    }
?>

2 个答案:

答案 0 :(得分:1)

您需要使用websockets来实现聊天系统。我不懂php。你可以尝试这个链接http://www.sanwebe.com/2013/05/chat-using-websocket-php-socket来理解websocket编程

答案 1 :(得分:0)

如果您真的需要,可以使用HTML5支持的WebSocket和Server-Sent Events。但是一开始长轮询就行了。然后,您可以了解聊天网站的要求和升级。

Read more on these methods (link).