私は Facebook のようなメッセージング システムに取り組んでいます。Facebookと同じように、左側に会話のリストがあり、右側にメッセージを読み込むボックスがあります。
基本的なシステム (PHP/MySQL) が完成しました。以下に、その構造に関する情報を示します。
messages.php - URL パラメーターに基づくメイン ページ。.htaccess で書き換え:
例:
- URL = http://www.domain.com/messages/ - 右ボックス: 新しいメッセージを送信するフォームを表示します。
- URL = http://www.domain.com/messages/Username
getUserMessages.php
-ログインしているユーザー間のメッセージを読み込みUsername
、右ボックスに表示するためのAjax 呼び出し。
- getUserMessages.php - ログインしているユーザーと選択されたユーザーの間のデータベース メッセージから取得します。出力 HTML を表示する準備ができています。
現在、システムは部分的に Ajax 化されており、Facebook のようにそうなってほしいと思っています。
現在、Ajax化された部分は次のとおりです。
ユーザーが会話を表示すると、自動的に新しいメッセージが表示され、最後のメッセージで会話リストが更新されます。
ユーザーが会話を表示していない場合、受信した新しいメッセージを取得し、会話リストを更新します。
これは PUSH サービスを使用して行われ、ユーザーにリアルタイムのエクスペリエンスを提供します。
私はこれを改善し、そのように動作させたい:
ユーザーが会話リストをクリックすると、右側のボックスにメッセージが読み込まれ、ページ全体をリロードせずにアドレス バーの URL が変更されます。
ユーザーが会話をクリックしたときにメッセージをロードする部分は簡単に実行できますが、開始する前に次の 2 つの質問があります。
1.ユーザーの会話を表示しているときに、ページをリロードせずにアドレス URL を変更するにはどうすればよいですか?
私は答えを見つけました。
2.会話をキャッシュするにはどうすればよいですか? そのため、ユーザーが 2 つの会話を切り替えた場合、php ファイルを再度呼び出してデータベースにすべてのメッセージを照会するのではなく、新しいメッセージのみを追加します (別の php ファイルを介して未読メッセージのみを取得する可能性があります)。
編集
私は解決策を思いついた:
ユーザーが会話を開くと、Ajax 応答全体 (つまり HTML) を次のような変数にキャッシュします。選択された会話の場所はmessages-n
どこですか。ユーザーがその会話をもう一度クリックすると、が設定されているかどうかを確認します。つまり、それを印刷してajaxリクエストを実行し、未読メッセージのみを取得して追加します。それは、実際のコードに到達しなかった私の心の中でのみです。n
user_id
messages-n
うまくいくでしょうか?