0

だから私はjavascript/phpチャットボックスに取り組んでいます。私のdivの内容を更新することを除いて、すべてが機能します(これは一度機能しますが、その後、新しいメッセージがデータベースに入れられたときに更新し続けません)。これが私のコードです:

Javascript 部分:

   <script language=javascript type='text/javascript'> 

        setInterval(function () {

            var arrayOfObjects = <?print_r(getChatArray());?>;
            var chat = "";

            for (var i = 0; i < arrayOfObjects.length; i++) {
                var object = arrayOfObjects[i];

                chat += "["+object.date+"]"+object.op+": " + object.msg + "</br>";
            }
            $('#chat').html(chat);

        }, 10);
    </script>

PHP の部分:

<?php
function getChatArray() {
    $result = mysql_query("SELECT * FROM shouts ORDER BY id DESC"); 
    $to_encode = array();

    $count = mysql_num_rows($result);
    $size = 0;
        if($count > 0) {
            while($row = mysql_fetch_assoc($result)) {
              $to_encode[$size]['id'] = $row['id'];
              $to_encode[$size]['msg'] = $row['msg'];
              $to_encode[$size]['op'] = $row['op'];
              $to_encode[$size]['date'] = $row['date'];
              $size += 1;
            } 

        } else {
            return "None";
        }

return json_encode($to_encode);
}
?>

なぜそれが継続的に更新されないのかについてのアイデアはありますか?

ありがとう。

4

2 に答える 2

4

JS は 10 ミリ秒ごとに元のチャット ルームのコンテンツを解析しているため、新しいコンテンツを取得していません。ajax 呼び出しを実装する必要があります。その setInterval を再帰的な setTimeout に変更し、たとえば 500 ミリ秒のより現実的な遅延を設定して、クライアントを強制終了しないようにすることを強くお勧めします。

これの代わりに:

setInterval(function() {

    var arrayOfObjects = <?print_r(getChatArray());?>;
    ...

次のようなものを使用します。

(function updateChat(){

    var arrayOfObjects, 
        chat, 
        max,
        _object,
        i = 0;

    $.ajax({
        url : '/getChatArray.php', // php echoes the json
        success: function(arrayOfObjects){
            for (max = arrayOfObjects.length; i < max; i++) {
                _object = arrayOfObjects[i];
                chat += "["+_object.date+"]"+_object.op+": " + _object.msg + "</br>";
            }
            $('#chat').html(chat);
            setTimeout(updateChat, 500);
        }
    });
}());

明らかに、必要に応じてその ajax ハンドラーを設定し、dataType などのパラメーターをいくつか追加し、エラー処理をいくつか追加します。

于 2012-04-11T13:53:28.870 に答える
2

データベースのコンテンツは、ページへの最初のナビゲーションでのみページに出力されます。このコード:

var arrayOfObjects = <?print_r(getChatArray());?>;

PHP がページをレンダリングするときに getChatArray() の戻り値の内容のみを出力します。したがって、スクリプトは、レンダリング時にその関数が返す状態を 1 つしか確認できません。

データベースからコンテンツを非同期的に取得するには、AJAXを使用する必要があります。

私はあなたをお勧めします:

  1. データをJSON形式で出力する PHP スクリプトを作成する
  2. jQuery、具体的にはgetJSON関数を使用して、そのスクリプトの出力を取得します
  3. そのデータでやりたいことをしてください。
于 2012-04-11T13:57:33.127 に答える