2011-03-17 3 views
0

私は、サーバーからデータを要求するためにjQuery/Ajaxを使用するオンラインチャットルームを持っています。しかし、私が使っているメソッドは非常に非効率的で、チャットの内容が変更された場合(新しいメッセージなど)、サーバのデータを読み込むだけで改善しようとしています。メソッドは論理的に正しいと思われますが、本当に。私は以下のコードを添付しました。私が間違っていることを教えてください。これは私に非常に苦労しています。私は、サーバーからのデータが異なる場合にのみchat divを変更したい。このjQuery/Ajax関数で何が問題になっていますか?

function loadMsgs() 
{ 
var v_loadMsgs = new XMLHttpRequest(); 

v_loadMsgs.open("GET", "msgs.php"); 

v_loadMsgs.onreadystatechange = function() 
{ 
    var old_content = $("#msgs").html(); 
    var new_content = v_loadMsgs.responseText; 

    if (old_content != new_content) 
    { 
     $("#msgs").html(new_content); 
    } 

    if (old_content == new_content) 
    { 
     $("#msgs").html("EQUAL!"); // only here for testing 
    } 
}; 

v_loadMsgs.send(null); 
} 

答えて

1

jQueryのAJAX関数を使用しています。彼らはすべてが本当に簡単ます

function loadMsgs() 
{ 
    jQuery.get("msgs.php", function(data) 
    { 
     if ($("#msgs").html() != data) 
     { 
      $("#msgs").html(data); 
     } else { 
      $("#msgs").html("EQUAL!"); // only here for testing 
     } 
    }); 
} 

あなたが本当にあなたの方法は、サーバが実際にあなたに(返す4readyState)応答を送信した場合、あなたがチェックしていない機能していない理由を知りたい場合は、次の

+0

魅力的な作品です! jQueryのAjax関数をさらに詳しく見ていきたいと思います。ありがとう、トン! – Zack

+0

jQueryにはたくさんの便利な機能があります;答えがあなたの質問に答えた場合は、答えの1つを解決策としてマークしてください。そうすることで、同じ問題を持つ他の人がソリューションをより迅速に見つけるのに役立ちます。 – Blender

+0

ありがとう、私はちょうどそれをしました:)と私の最初のエラーを指摘するためにそんなに感謝、それは私を狂った運転していた。私はreadyStateをチェックしていませんでした。なぜなら、jQueryがそれを独自に行っているという印象を受けていたからです。しかし、それは悪い誤解でした。 – Zack

1

あなたが.html()を行うとjquery's ajax functions

+1

提案していただきありがとうございますが、なぜこれが機能していないのか説明があります。私の実装に欠陥があるのですか、あるいはこの方法は適切ではありませんか? – Zack

+0

「いつも本当に評価される」とは何ですか? – Neal

+0

虚偽を書くことを意味する! – Zack

3

を使用してみてください、ブラウザはあなたにきちんとフォーマットされたHTMLを提供します。つまり、すべてのタグが閉じられ、すべての属性が引用符で囲まれています。 msgs.phpから戻ってきたものは、おそらく完全にはフォーマットされていません。したがって、その違い。

しかし、効率が悪いと心配している場合は、はまだと非常に効率が悪いです。つまり、あなたは不必要にUIを更新しませんが、サーバーからのメッセージのリストを読み込んでいますか?

ここで2バイトを節約するために、 "if-modified"テクニックを採用してください。つまり、メッセージのリストとともに、何らかのタイムスタンプを返します。言って、ちょうど整数。サーバー上で何かが変わったら、その整数を1つ増やしてください。サーバーからの更新をリクエストするときは、AJAXコードに以前に受信したタイムスタンプを渡して、タイムスタンプが最新の場合はサーバーに「何も変更されていません」と応答させます。それ以外の場合は、サーバーにメッセージの新しいリストを送信させます。これはおおよそのアイデアです。

+0

うわー、私はそれを知らなかった、ありがとう。私の最善の策はjQuery.ajax()関数をこのようなもので調べることだと思います。 – Zack

+0

@ user665132:私の更新をご覧ください。ところで、 'jQuery.ajax'を使用してもここでは助けにならないでしょう。 –

+0

あなたの言っていることが分かります。 reponseTextはすべてのサーバー配信データを格納しており、常にそれを空にして/再読み込みするので、これは良い考えです。私は間違いなくそれを行うでしょう:) – Zack

関連する問題