2013-07-28 4 views
0

PHP/jQuery/MySQL에서 비교적 간단한 "아이디어 게시판"을 만들었습니다.테이블에 새 항목이 있는지 주기적으로 새로 고침

페이지에서 div 을로드하십시오. #chat은 데이터베이스의 현재 항목을 가져옵니다.

<div id="chat"> 
    <?php 

    $sql = "SELECT * from idea ORDER BY id DESC;"; 
    $result = $pdo->query($sql); 

    if($result->rowCount() > 0 && !empty($result)) 
    { 
     foreach ($result as $row) 
     { 
     $title = $row['title']; 
     $idea = $row['idea']; 

     echo '<span class="idea"><strong>' . $row['title'] . "</strong>&nbsp;-&nbsp;" . $row['idea'] . '&nbsp;<a class="delete" href="">[Delete]</a></span>'; 
     } 
    } 
    ?> 
    </div> 

나는 그것을 사용하여 정기적으로 갱신 할 수 싶습니다 그러나 :

나는 (데이터베이스 쿼리와 함께 할 것입니다 방법을 아래의 예는이 텍스트 파일을 사용하여 수행 할 수있는 방법을 자세히
<body onload="setInterval('chat.update()', 1000)"> 

, 예는 http://css-tricks.com/jquery-php-chat/에서 발견되었습니다)?

//Updates the chat 
function updateChat() { 
    if(!instanse){ 
     instanse = true; 
     $.ajax({ 
      type: "POST", 
      url: "process.php", 
      data: {'function': 'update','state': state,'file': file}, 
      dataType: "json", 
      success: function(data) { 
       if(data.text){ 
        for (var i = 0; i < data.text.length; i++) { 
         $('#chat-area').append($(" 

         "+ data.text[i] +" 

         ")); 
        } 
       } 
       document.getElementById('chat-area').scrollTop = document.getElementById('chat-area').scrollHeight; 
       instanse = false; 
       state = data.state; 
      } 
     }); 
    } 
    else { 
     setTimeout(updateChat, 1500); 
    } 
} 

특정 행이 삭제 될 것으로 예상되므로 추가되는 항목 위에는 일부를 제거하고 싶습니다.

실시간 대화를 시뮬레이트해야합니다.

+1

아약스 요청의 전체 콜백 함수에서 시간 제한을 설정할 수 있습니다 –

+0

@roasted 예를 보여 줄 수 있습니까? – methuselah

+0

http://css-tricks.com/examples/Chat.zip 여기에서 파일을 다운로드하십시오. –

답변

2

간단한 long polling 기술을 사용하여 채팅을 업데이트 할 수 있습니다.

예 :

//Updates the chat 
function updateChat() { 
    if(!instanse){ 
     instanse = true; 
     $.ajax({ 
      type: "POST", 
      url: "process.php", 
      data: {'function': 'update','state': state,'file': file}, 
      dataType: "json", 
      success: function(data) { 
       if(data.text){ 
        for (var i = 0; i < data.text.length; i++) { 
         $('#chat-area').append($(" 

         "+ data.text[i] +" 

         ")); 
        } 
       } 
       document.getElementById('chat-area').scrollTop = document.getElementById('chat-area').scrollHeight; 
       instanse = false; 
       state = data.state; 
      }, 
      complete: function(){ 
       setTimeout(
        updateChat, /* Request next message */ 
        10000 /* ..after 10 seconds */ 
       );     
      }, 
      error: function(XMLHttpRequest, textStatus, errorThrown){ 
       //display you error message    
      }, 
      timeout: 10000 //Timeout is necessary to prevent chaining of unsuccessful ajax request  
     }); 
    } 
} 
0

당신은 클라이언트 알림 및/또는 양방향으로 실시간 통신 서버를 구현하는 socket.io 라이브러리를 사용할 수 있습니다.

관련 문제