1

div (div1) にあるチャットの内容を更新しようとしていますが、div1 の内容が変更された場合 (メッセージが db に送信され、div1 で取得された場合) のみです。

ここから解決策を試しましたが、データの比較に失敗しました。

このソリューションは完全に機能しますが、コンテンツの比較はありません:

window.onload = startInterval;
function startInterval()
{
    setInterval("startTime();",2000);
}

function startTime()
{
    jQuery('#div1').load('index.php #div1 > *');
}

これは、失敗するthisに基づく変更です。

window.onload = startInterval;
function startInterval()
{
    setInterval("startTime();",2000);
}

function startTime()
{
    var $main = $('#div1');
    $.get('chat.php #div1', function (data)
    {
        if ($main.html() !== data) $main.html(data);
    }); 
}

このコードのさまざまな変更を試みましたが、役に立ちませんでした... ページ全体をリロードすることはできません。メッセージをスクロールする必要がある場合、チャットが読みにくくなるため、必要でない場合はこれを行いたくありません。 . これはどのように修正できますか?

アップデート

@TJ の提案に基づいて、完全に機能するコードを修正しました。

window.onload = startInterval;
function startInterval()
{
    setInterval(startTime,3000);
    scrolDown();
}

function startTime()
{
    var $main = $('#div1');     
    $.get('#div1', function (data)
    {
        elements = $(data);
        thisHTML = elements.find("#div1").html();
        if ($main.html() !== thisHTML) {                
            $main.html(thisHTML);
            scrolDown();
        }           
    });     
}

もう1つの問題は、必要なライブラリを取得することでした:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script>

これは、以前使用していた負荷では明らかに必要ではありませんでした。

4

1 に答える 1

1

を使用しgetたいが、 のフラグメント機能が必要なloadため、その作業を自分で行う必要があります。次に、前回取得したものを覚えておいて、同じでない場合にのみ更新します。

var lastHTML;

function startTime()
{
    var $main = $('#div1');
    $.get('chat.php', function (data) // <== Or index.php, the question has both
    {
        var elements, html;

        // Turn the HTML into elements
        elements = $(data);

        // Get the HTML of *only* the contents of #div1
        html = elements.find("#div1").html();

        // If that has changed, use it
        if (lastHTML !== thisHTML) {
            lastHTML = thisHTML;
            $main.html(thisHTML);
        }
    }); 
}

これはフラグメント機能のかなり基本的な実装であることに注意してください (たとえば、スクリプトのように削除するわけではありませんload)。loadそのフラグメントがどのように機能するかを調べて、それを複製することをお勧めします (オープンソースの喜び)。

于 2013-05-28T12:50:31.550 に答える