2012-04-11 5 views
0

그래서 저는 javascript/php chatbox에서 일하고 있습니다. 모든 것은 내 div의 내용을 업데이트하는 것 외에는 작동합니다 (이 작업은 한 번 작동하지만 이후에는 새 메시지가 데이터베이스에 저장 될 때 업데이트되지 않습니다). 그것은 지속적으로 업데이트되지 않는 이유에자동으로 chatbox를 업데이트합니다.

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

어떤 아이디어 :

자바 스크립트 부분 :

<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는 부분 여기 내 코드는?

감사합니다.

+2

부수적으로, 코드에는 몇 가지 나쁜 습관이 있습니다. – BenM

+0

클라이언트와 서버 측의 차이점을 놓친 것 같아요. –

+0

방금 ​​js를 배우기 시작 했으므로 코드에 박수를 치는 것이 좋다고 기대하지 않습니다. –

답변

4

JS가 원래 대화방 내용을 파싱 할 때마다 10 밀리 초마다 새 내용을 가져 오지 않으므로 당신은 아약스 호출을 구현해야하고, 나는 setInterval을 재귀 적 setTimeout으로 변경하여 클라이언트를 죽이지 않도록보다 현실적인 500ms의 지연 시간을 설정하는 것이 좋습니다.

setInterval(function() { 

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

당신은 같은 것을 사용하는 것이 :

이 대신

등 데이터 유형과 같은 좀 더 PARAMS을 추가,

(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 페이지를 렌더링 할 때. 따라서 스크립트는 렌더링 할 때 그 함수의 한 상태 만 반환하는 것을 볼 수 있습니다.

데이터베이스에서 비동기 적으로 내용을 검색하려면 AJAX을 사용해야합니다.

난 당신을 제안 :

  1. 은 당신이 수행 할 작업을 수행하는 스크립트의 출력을
  2. 를 검색 할 JSON 형식으로
  3. 사용 jQuery을 데이터를 출력하는 PHP 스크립트, 특히 getJSON 함수를 만듭니다 그 데이터.
관련 문제