0

私はチャット アプリケーションを持っています。このアプリケーションでは、オンライン ユーザーをチャットルームに表示したいと考えています。オンライン ユーザーを記録するデータベースがあり、新しいユーザーが来るたびに変化し続けます。ユーザーが離れると、データベースから削除されます。データベースは、ユーザー名と部屋の 2 つの列で構成されます。データベース側は正常に動作します。

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>

- - - なにか

ここでは、データベースの状況(特定の部屋の行)を確認し、その部屋のチャット数を同時に変更したいと考えています。「現在」はユーザー数、「部屋」は部屋の名前ですが、データベースの行数が変わっても変化はありません。どの部分が欠けていますか? 注: index.php に online.js を追加しました

4

1 に答える 1

0

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

この行は古い要素の下に新しい要素を配置します。やりたいことは、呼び出して古い要素を置き換えることです

$('#bu').html(numOfUsers);

またsetTimeout()、ミリ秒かかるため1、非常に低い値です。最初から始めて1000、そこから作業することをお勧めします。

編集: そしてsetTimeout()、関数をパラメータとして受け取るので、次のように呼び出します:

setTimeout(getuserlist, 1000);
于 2012-08-23T22:16:21.307 に答える