2

ajax を使用して、新しいデータのみを div にロードする必要があります。データベース内のレコードを削除すると、チャット div からも削除されるため、現時点ではすべてのデータを読み込んでいます。

ここに私のjsコードがあります:

var chat = {}
chat.fetchMessages = function () {
    $.ajax({
        url: '/ajax/client.php',
        type: 'post',
        data:  { method: 'fetch', thread: thread},
        success: function(data) {
            $('.chat_window').html(data);
        }
    });
}    

chat.throwMessage = function (message) {
    if ($.trim(message).length != 0) {
        $.ajax({
            url: '/ajax/client.php',
            type: 'post',
            data:  { method: 'throw', message: message, thread: thread},
            success: function(data) {
                chat.fetchMessages();
                chat.entry.val('');
            }
        });
    }
}

chat.entry = $('.entry');

chat.entry.bind('keydown', function(e) {
    if(e.keyCode == 13) {

        if($(this).val() == ''){
        } else {
            chat.throwMessage($(this).val());
            e.preventDefault();
        }

    }
});

chat.interval = setInterval(chat.fetchMessages, 8000);
chat.fetchMessages();

私は周りを見回しており、タイムスタンプをサーバーに渡して新しいコンテンツをそのようにロードすると言う人もいますが、それを理解できないようです。phpが必要な場合はお知らせください。

4

1 に答える 1

2

そうです、タイムスタンプのことが最も理にかなっています。あなたはいくつかのことをする必要があるでしょう:

  1. バックエンドでは、client.phpがクエリ文字列のタイムスタンプパラメータを受け入れるようにする必要があります。データを返すときは、すべてを返すのではなく、タイムスタンプが指定されている場合はそれ以降のすべてを返すようにします。それ以外の場合はすべてを返します。
  2. チャットクライアントを初めてロードするとき、最初にすべきことは、現在のサーバーのタイムスタンプを返す新しいPHPファイルに対してAjax呼び出しを行うことです。その値をJavascript変数に数値として格納します。
  3. chat.fetchMessages()中に、タイムスタンプ変数の値を最後のフェッチからの経過時間(8000ミリ秒のように見える)だけインクリメントし、それをclient.phpにフィードします。url: '/ajax/client.php?timestamp=' + latestFetchTimestamp,
  4. すべてのHTMLコンテンツを置き換える代わりに、代わりに追加します。
于 2013-02-19T18:24:14.333 に答える