2012-04-03 5 views
0

ストーリーが短いので、チャットアプリケーションを構築しようとしています....すでにビルド済みですが、AJAXを実装しようとしています。基本的には、ユーザーが投稿したときにメッセージがDBから出てくるので、ページが更新されずにページに自動的に反映されます。リフレッシュ時にAjax/jsが表示され/ php/sqlから出てくるコンテンツを制限する

私が考えることができるのは、ユーザー入力なしで実行できると思う唯一のイベントは、@ 5秒ごとに繰り返すように設定したJavaScriptのsetInterval()関数です。

(エコーされた)メッセージがあるPHP側では、私は 最後の10メッセージだけを表示するステートメントを持っています。

問題は、5秒ごとに同じ10個のメッセージが吐き出されることです。何度も何度も壊れてしまったレコード。とにかく私は知らない何/実装する方法を見つけ出すカント、「言うフィルタの種類、または何かある

がある場合にのみちょっとだけ私の最後の10件のメッセージを表示し、更新します新しいコンテンツ。

は、だから私は必要なもののみ場合にのみ、その新しいコンテンツの最新のxの記事を表示すると言う何か(その1は、ページを更新するので、私はJavaScriptを仮定)です。私はたぶんif/elseを別の値と比較し、false/trueの場合はリフレッシュを実行すると考えていましたが、 私は何を比較していますか?

わかりましたように、私はこだわっています。

私はここに2つのコードを入れたくありませんが、本質的にPHPはDBセクションから行を読み込み、エコー経由で最新の10個の投稿を投稿します。

これらのメッセージを取得してページに投稿するAJAxコマンドがJsにあります。

もう一度、ajax/js refreshで同じ10個のメッセージを再投稿します。

すべてのヒント、リンク、LOGIC ...私は喜んで謙虚かつ謙虚に感謝するこのこぶを取得するための何か。

P.S - コードが必要な場合。私に知らせて、それを投稿してみましょう。

ありがとうございました。

答えて

1

はあなたのJavaScriptで最後返されたタイムスタンプを保持し、そしてあなたは、クライアントを更新するに沿っていることを送信し、あなたのSQLの条件としてそれを使用する必要がある場合:

select * from chat_logs WHERE datetime > $postedValueFromClient # AND YOUR OTHER CONDITIONS 

が戻ってあなたのクライアントにそのクエリの結果が得られ、最後のタイムスタンプも更新します。

私はコードを持っていないので、さらに助けになることはできませんが、それはそれを実装する方法の1つです。

+0

あなたに感謝しました。 – somdow

1

私がメッセージを受信するように設定された場合にも、例えばreadのためにあなたのテーブルに列を作り、1または0に設定し、一度に1行をフェッチし、受信した最後の行のIDを覚えているだろう1を読み取り、読み取ったメッセージが0に設定されているものだけを探します。

MySQLの声明:

SELECT * FROM `table` WHERE `id` > `lastID` AND `read` = 0; 
2

ので、ウェブチャットクライアントがそのは処理に長い時間がかかっているかのように、彼らはサーバーにリクエストを行い、サーバーがハングアップすることができます。このことを行うが、その代わりに、その待ち他の誰かがチャットを投稿しているかどうかを確認するために、タイムアウトの最大値に達すると、ユーザーに返信します。実際にタイムアウトすると、実際にタイムアウトすることができます。 。これは厄介なことを解消し、5秒ごとに初心者向けの呼び出しを行います。

+0

ええ、私はこれについて考えていましたが、後で取り組むつもりでした...これについてどうやってお勧めしますか?私は、IDは依然として要求のためにサーバーを打つ必要があることを意味しますか? – somdow

+1

はい、あなたはまだサーバーにヒットする必要がありますが、whileループやそれに類するサーバーループがあり、タイムアウト内に新しいメッセージがない場合は、ループを中断します。これは、5秒ごとに1回問題を解決します。 – Ryan

+0

よろしくお願いします。論理は素晴らしいです。何が良いクートナーになるでしょうか? 〜と比較するのと同じように?私が尋ねる理由は、メッセージが最後のものであるかどうかを知るためには何らかの方法が必要です。私は比較することができますし、ループから抜け出すか、ポスト...問題は私が比較する1つの事が必要であり、それが何であるかを確認する必要があります。 – somdow

関連する問題