1

私はインスタント更新コメントシステムを持っています(これは、誰かが投稿すると、ページをリロードする代わりに更新することを意味します)。setIntervalを使用してAJAXを実行し、サーバーに送信してコメントをリロードします。そのため、コメントは点滅し続けます。とにかく、phpMyadminSQL行が追加されたことがわかったときにのみコメントを更新する方法が必要です。

私のサイト: http: //learntc.net/index.php

私が得るどんな助けにも感謝します。何かについてもっと情報が必要な場合はコメントしてください。

4

4 に答える 4

2

コメントをロードすると、各レコードにIDが付けられます。ページにロードされている最高のレコードIDがわかります。

JSタイマーがajax呼び出しを行うとき、最もロードされたIDをサーバーに送り返すようにします。クエリは、IDが指定された値よりも大きいレコードをロードするようにのみ指定できます。その場合、ページ上のレコードよりも新しいレコードのみを取得します。

次に、このデータがページに返送されたら、コメントブロック全体を置き換えるのではなく、既存のコメントブロックの最後に新しいデータを追加するだけです。

これにより、既存のコメントを再ロードする必要がなくなります。ちらつきを防ぎ、SQLクエリをより効率的にし、同じデータを何度も送信することから帯域幅を節約します。

それがあなたが始めるのに十分な説明であることを願っています。

最後に、もう1つ。トピックから外れていますが、言及する必要があります。JavascriptsetInterval()関数を避けることをお勧めします。代わりに使用setTimer()し、反復ごとに再トリガーします。

これは、setInterval()JSコードによって遅延が発生した場合に問題が発生する可能性があるためです。たとえばalert()、ユーザーが長時間画面に表示されたままになっている場合、システムをブロックしsetInterval()ている間に発生した通話alert()はすべて積み上げられ、すぐに次々に起動されます。 JSが制御を取り戻すと。これは深刻な問題になる可能性があります。setTimer()代わりに使用すると、この問題を回避できます。

より良い説明については、ここを読んでください:http: //bonsaiden.github.com/JavaScript-Garden/#other.timeouts

于 2012-10-02T20:55:46.673 に答える
1

AJAXリクエストに、ユーザーに最後に表示されたコメントのIDを送信させることができます(非表示の入力に保持したり、divのIDとして保持したりできます)。これを使用すると、新しいコメントのみをユーザーに返すことができます。応答関数では、既存のコメントのリストに新しいコメントを追加できます。これにより、すべてのコメントの点滅が防止され、帯域幅に対して確実に正常になります;)

于 2012-10-02T20:44:45.580 に答える
1
  1. 最後のコメントIDまたはそのタイムスタンプ(テーブルに時間が記録されている場合)のいずれかを返します。
  2. 次のAjaxリクエストでは、上記をパラメータとして送信し、既存の値よりも大きいレコードのみをクエリします。
  3. 結果を追加します。
于 2012-10-02T20:48:15.250 に答える
0

私はそのようなシステムを作りました。コード自体は十分に大きいですが、主なアイデア(最も単純なもの)は、ページで利用可能なコメントのIDを収集し(または最新のコメント時間を使用するのに十分かもしれません)、現在ページで利用できないコメントをロードすることです。(AJAX呼び出しでマーカーを渡し、クエリで使用して、本当に必要なアイテムのみを取得します)コメントが常に追加される場合は、HTMLをロードして、コメントリストの最後に追加するだけです。コメントが削除される可能性があり、それを示す必要がある場合は、JSONを使用することをお勧めします。

現在の実装について-なぜそれほど頻繁に更新する必要があるのですか?私はそれが毎秒かそこらで起こるのを見ます。サーバーをロードするだけです。また、htmlやbodyなどを返す必要はありません。これはあなたの場合は単なるゴミです。また、応答本文に含まれているjqueryスクリプトがあります。なぜ???あなたはすでにそこにそれを持っています。

jqueryの他のAJAX関数を見てください。.loadだけではありません。

于 2012-10-02T20:47:16.813 に答える