2012-07-27 74 views
0

我需要實時更新消息的建議,這裏是我的代碼:實時更新的收件箱中的郵件

<script> 
    function fetch_messages(){ 
     var user_id = "1" // example id 

     $.ajax({ 
      url: "do_fetch.php", 
      type: "POST", 
      data: { user_id : user_id }, 
      dataType: "json", 
      success: function(data) { 
       for (var i = 0; i < data.length; i++) { 
        $("#messages_list").append('<div id="'+data.id+'">'+data.message+'</div>'); 
       } 
       setTimeout("fetch_messages()", 3000); 
      } 
     }); 
    } 
    $(function(){ 
     fetch_messages(); 
    }); 
</script> 

並沒有DIV消息:

<div id="messages"> 
</div> 

PHP代碼:

<?php 
    include('connection.php') 

    $user_id = $_POST['user_id']; 
    $my_id = $_SESSION['user_id']; 

    $sql = 'SELECT * FROM messages WHERE user_id = '.mysql_real_escape_string($user_id).' AND my_id = '.mysql_real_escape_string($my_id); 
    $result = mysql_query($sql, $connection); 

    echo json_encode($result); 
?> 

此代碼有效,但我不想閱讀所有消息並顯示它們,我只需要加載新消息,那麼我該怎麼做?我是否需要在時間戳中放置一個隱藏的字段,並且檢查Ajax的時間?

+0

'mysql_ *'已棄用 – 2012-07-27 14:03:26

回答

2

首先,你用Ajax加載僅有20消息在UL

<ul> 
    <li>message 1</li> 
    <li>message 2</li> 
    <li>message 3</li> 
    <li>message 4</li> 
    <li>message 5</li> 
    <li id="{{message_date}}">message 6</li> 
</ul> 

然後得到的最後一條消息的ID來獲得日期。

$('li').last().attr('id') 

您可以點擊按鈕加載更多。

var message_date = $('li').last().attr('id'); 
$.ajax({ 
    url: "do_fetch.php", 
    type: "POST", 
    data: { date : message_date }, 
    dataType: "json", 
    success: function(data) { 
     for (var i = 0; i < data.length; i++) { 
      $("ul").append('<liid="'+ data.date+'">'+data.message+'</li>'); 
     } 
    } 
}); 

在php文件你日期> MESSAGE_DATE選擇信息與限制30

您可以通過用戶ID了。

2

保存發送的最後一條消息的id,然後通過ajax發送該id,並查詢比該id更新的所有內容。

1

您需要在表格中添加一個「讀取」布爾字段。它應該默認爲false,然後每當查看消息時,都應該更新所有被閱讀的消息。

SELECT * FROM `messages` WHERE user_id=? AND my_id=? AND `read`=0; 
UPDATE `messages` SET `read`=1 WHERE user_id=? AND my_id=?; 
+0

謝謝,我認爲這是最好的解決方案。 – 2012-07-27 14:15:30

1

可以使用,例如,下一個:的setInterval(fetch_messages,5000)。每五秒鐘發送一次請求。比在服務器上保存會話當前時間(第一次)。在上次獲取會話的第二個請求期間,獲取當前時間並獲取當前和上次之間的所有行。