2012-03-24 3 views
1

AJAXとPHPの新機能ですが、PHPはサーバー側のスクリプト言語なので、ユーザーがページを更新したり、ユーザーがフォームを送信しない限り、htmlは変更されません。 FacebookのユーザがFacebookは、ユーザーが新しいメッセージを受信し、HTMLを変更したときを、どのように検出しますか?

enter image description here

は、AJAX関連のあるメッセージを受信したときだから<span id="mercurymessagesCountValue">の数値の変化を考えます。

、これは私の推測である:

数の変化は、別のユーザ【送信者が特定のテーブルに新しい行を挿入したことを検出した場合にトリガされ、各列は異なるデータが含まれます。時刻、メッセージ、送信者ID、受信者IDなどが含まれます。

これは私の質問です...この場合、データベースの変更がどのように検出され、どのようにhtmlを変更するためにjavscript [または何か他のもの]をトリガーしますか?あるいは、私が間違っていたら... Facebookがどうしているのか分かりますか?どうもありがとう!!

答えて

1

ここでいくつかのことを明確にしてみましょう。 AJAXは、別のページのデータを動的に取得するためにブラウザから送信される単なるリクエストのタイプです。 Facebookの場合、実際には、ページを「生きている」状態に保つために、クライアントコンピュータとの特別なタイプの接続があります。このようにして、サーバー上の単一ページを絶えずポーリング/リフレッシュせずに(大量の負荷をかけることなく)動的更新をクライアントにプッシュできます。

それでは、ただ、彼らは常に未読どのように多くの通知を決定するために、サーバー上のページを更新しているふりをしましょう -

クライアント - > Ajaxのコール - >サーバーのPHPのページ - >アヤックスに戻る - >クライアント

したがって、クライアントは、サーバーによって生成されるページの要求を送信します。 サーバのphpページは、その特定のユーザのデータベース内の「未読」通知行の数をカウントします。次に、未読行の数をプレーンhtmlで出力します。

クライアントがAjax呼び出しからこのプレーンHTMLをrecieves、単に未読通知の新しい番号でDOMを更新

ご注意:これは、Facebookがどのように動作するかではありませんが、それはどのように良い例です動的コーディングが初めての方は、独自の基本通知システムを設定してください。

+0

この回答が役に立ちましたら、アップしてください。 – nickw444

4

質問が正しければpullpushモデルをチェックしてください。 Facebookはプッシュモデルの下で動作します:新しいメッセージが受信されたとき、facebookサーバーはそれを知り、通知をクライアントにプッシュします(ブラウザーで開いているWebサイト)。

0

私の推測では、リクエストはクライアントからJavascript経由でクライアントに頻繁に送信され、ホストには「前回質問してから何か新しいことがありますか?」と尋ねられます。その答えはサーバでPHPによって返されます。はいの場合、新しいデータがレスポンスに渡され、JavaScriptは赤いフラグなどの新しいデータでDOM(HTML)を更新します。

-2

javascript:location.load(t); (t =時間間隔) 数秒ごとにページをリフレッシュすると、通知がポップアップして..