在聊天应用程序中显示在线用户

时间:2012-08-23 22:06:06

标签: php javascript jquery

我有一个聊天应用程序,在这个应用程序中,我想在聊天室中显示在线用户。我有一个记录在线用户的数据库,每当有新用户到来时它就会不断变化。每当用户离开时,它将从数据库中删除。数据库由两列组成:用户名和房间。数据库端工作正常。

onlinelar.php:

<?php

$data = array();

        $current = $_GET['current'];

        $room = $_GET['room'];

        $getRoomUsers = mysql_query("SELECT * FROM `chat_users_rooms` WHERE `room` = '".$room."'");

        if(mysql_num_rows($getRoomUsers) != $current)
        {
            $data['numOfUsers'] = mysql_num_rows($getRoomUsers);    
        }
        else
        {
            $data['numOfUsers'] = $current; 
        }
        echo json_encode($data);

?>

online.js:

var numOfUsers = 0;
var room;

function chat(room2)
{
room = room2;   
}

$.ajaxSetup({
    cache: false 
});


function getuserlist() {


     $.ajax({
        type: "GET",
        url: "onlinelar.php",
        data: {  
                'room': room,
                'current' : numOfUsers
              },
        dataType: "json",
        cache: false,
        success: function(data) {
                if (numOfUsers != data.numOfUsers) {
                numOfUsers = data.numOfUsers;

                $('#bu').html($("<strong id='bu'>"+ numOfUsers + "</strong>"));
            }




            setTimeout(getuserlist(),1);

        },
    });

}

最后,它在index.html中的初始化器:

----东西

       <script type="text/javascript">

                var chat = new Chat(<?php echo $room;?>);
                chat.getuserlist();

            </script>
                      <strong id="bu">
                        <?php
                        echo $numOfUsers;
                        ?>
                        </strong>

------东西

在这里,我想检查数据库情况(特定房间的行),并同时更改该房间中的聊天数量。 'current'表示用户数,'room'表示房间名称。但即使数据库行数正在变化,也没有变化。我错过了哪一部分? 注意:我在index.php中添加了online.js

1 个答案:

答案 0 :(得分:0)

$('#bu').html($("<strong id='bu'>"+ numOfUsers + "</strong>"));

此行在您的旧元素下放置一个新元素,您要做的是通过调用

替换旧元素
$('#bu').html(numOfUsers);

同样setTimeout()需要几毫秒,因此1的值非常低,您可能希望从1000开始,然后从那里开始工作。

修改 并且setTimeout()将函数作为参数,因此您需要调用:

setTimeout(getuserlist, 1000);