2012-04-11 23 views
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); 
} 
?> 

任意のアイデアそれは継続的にそれを更新していない理由として?

ありがとうございました。

+2

メモとして、あなたのコードにもかなり悪い習慣があります。 – BenM

+0

クライアント側とサーバー側の違いが間違っていると思います –

+0

私はちょうどjsの学習を始めましたので、私のコードでバットからすぐに良いプラクティスを得ることは期待できません。 –

答えて

4

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

setInterval(function() { 

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

あなたはこのようなものを使用します:もちろん、あなたがなどのdataType、のようないくつかのより多くのparamsを追加し、あなたのニーズにそのAJAXハンドラを埋めるだろう

(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); 
     } 
    }); 
}()); 

をし、何らかのエラー処理。

+0

申し訳ありませんが、あなたは私とあなたが意味するものの例を与えることができますか? –

+0

更新された回答を参照してください。 – AlienWebguy

2

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

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

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

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

私はあなたをお勧め:

  1. 特にgetJSON機能の使用jQueryは、あなたがやりたいこと、スクリプトの出力
  2. を取得するためにJSON形式で
  3. をあなたのデータを出力するPHPスクリプトを作成します。そのデータ。
関連する問題