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 で確認する必要がありますか?

4

4 に答える 4

2

最初に ajax で ul に 20 個のメッセージをロードします

<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 ファイルで、date > message_date の制限が 30 のメッセージを選択します。

ユーザーIDも渡すことができます。

于 2012-07-27T14:15:26.650 に答える
2

送信された最後のメッセージの ID を保存してから、その ID を ajax 経由で送信し、その ID よりも新しいものからすべてをクエリします。

于 2012-07-27T14:06:23.847 に答える
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=?;
于 2012-07-27T14:07:18.293 に答える
1

たとえば、次のように使用できます: setInterval(fetch_messages,5000) 。5 秒ごとにリクエストが送信されます。セッションの現在の時刻にサーバーで保存するよりも(初めて)。前回のセッションから取得する 2 番目のリクエストでは、現在の時刻を取得し、現在と前回の間のすべての行をフェッチします。

于 2012-07-27T14:13:36.307 に答える