ホームページ >バックエンド開発 >PHPチュートリアル >Ajax テクノロジー 1、Ajax テクノロジー_PHP チュートリアル
1998 年、Microsoft の Outlook Web Access 研究開発チームは、クライアントを更新せずに HTTP リクエストをサーバーに送信できるテクノロジを当時の IE ブラウザに統合しました。このテクノロジは 「XMLHTTP」 と呼ばれていました。
2005 年、Google は多くの製品 (Gmail、Google サジェスト検索候補、Google マップ) に Ajax テクノロジーを適用しました。それ以来、Ajax が普及しました。
いわゆる Ajax テクノロジーは非同期 Javascript と XML です。XML は主にデータの送信と保存に使用されるため、Ajax の中核は非同期 Javascript であることがわかります。
クライアント言語:
サーバー言語:
Ajax は非同期 Javascript であるため、Ajax はクライアントのブラウザーでも実行されることがわかります。
ネットワーク速度が比較的遅い場合、ユーザーはリクエスト全体が不連続なプロセスであると感じるため、同期リクエストのエクスペリエンスは非常に満足のいくものではありません。
上の図からわかるように、ユーザーがリクエストを送信すると、システムはまず Ajax オブジェクトにリクエストを送信し、次にサーバーがリクエストを処理します。完了すると、データの一部がクライアントに返されるため、ユーザーにとって、リクエスト全体が継続的なプロセスとなり、エクスペリエンスは非常に優れています。
①フォーム認証(ユーザー名が一意であるかリアルタイム認証)
② Baidu ドロップダウン検索
③ ページング更新なし
④ WebAPPモバイル+PHPバックグラウンドプログラム(モバイルAPP)
demo01_rumen.html
demo01.php
実行結果:
覚えておいてください: Ajax テクノロジーを使用するには前提条件があり、Ajax オブジェクトを作成する必要があります。
IEコアブラウザベース(IE8以下のIEブラウザ、各種ブラウザの互換モード)
var Ajax オブジェクト = new ActiveXObject('Microsoft.XMLHTTP');
W3Cコアブラウザ(Firefox、Google Chrome、各種ブラウザのエクストリームスピードモード)に基づく
var Ajax オブジェクト = new XMLHttpRequest();
① コアコードベースとしてpublic.jsファイルを作成する
② 指定したIDのDOMオブジェクトを取得する$functionを定義する
③ Ajaxオブジェクトを作成するためのcreateXhr()などのパブリック関数を定義する
一般的な方法
パラメータの説明:
header: リクエストヘッダー
値: 値
パラメータの説明:
内容: リクエストの空白行で渡されるパラメータ。getリクエストの場合、この値はnullです。
よく使用される属性
0: オブジェクトは作成されましたが、初期化されていないことを示します。createXhr メソッドは呼び出されていますが、open メソッドは呼び出されていません。
1: オブジェクトは初期化されたが送信されていないことを示します。open メソッドは呼び出されていますが、send メソッドは呼び出されていません。
2: リクエストを行うために send メソッドが呼び出されました。
3: データの受信(受信したデータの一部)
4: 受付完了
サーバー側が文字列を返した場合は、xhr.responseTextを使用してそれを受け取ります
サーバーがXML形式でデータを返す場合は、xhr.responseXMLを使用してそれを受信します
① Ajaxオブジェクトを作成する
② コールバック関数を設定する
③ Ajaxオブジェクトの初期化
④ Ajaxリクエストを送信する
⑤ 判決と執行
demo04.php
demo05.php
1) 質問: Ajax を使用すると、サーバー側の echo ステートメントを通じてデータが返されることがわかりますが、この場所を return ステートメントに置き換えることはできますか?
回答: echo ステートメントと return ステートメントは両方とも return という意味を持ちますが、両者のリターン位置は異なります。return ステートメントはデータをサーバーに返しますが、echo 出力は主に出力データをクライアントに返します (ブラウザ)。したがって、サーバー側で使用できるのはecho文のみであり、return文は使用できません。
2) 質問: Ajax リクエストを送信するとき、リクエストされたページが存在しない場合はどうなりますか?
回答: リクエストしたサーバー側ページが存在しない場合、その Ajax は次の結果も返します。
しかし、実際のプロジェクト開発において、上記のポップアップウィンドウが表示されるのはユーザーエクスペリエンスにとって良くないため、この行為は禁止されなければなりません。
サーバー側の応答ステータス コードを判断することで、上記の状況を回避できます。
上記のコードは、次の形式にさらに簡略化することもできます。
3) 質問: 実際のプロジェクト開発において、上記の判定文 xhr.readyState==4 と xhr.status==200 の位置を入れ替えることはできますか?
回答: いいえ、実際のプロジェクト開発では、Ajax ステータス コードが最初に判断される必要があるため、ステータス コードが 4 の場合は、サーバーから返されたデータが完全に受信されたことを意味し、status は、readyState が 4 に等しいことを示します。サーバーの戻りステータス コードを確認し、両者の間で順序を交換できないようにします。
4) 質問: 開発中に Ajax をデバッグするにはどうすればよいですか?
① Ajax 構文エラーの場合は、IE のステータス バーまたは Firefox の Firebug プラグインのコンソールから直接キャプチャできます。
② サーバー側のエラーについては、開発中に異常な戻り結果を発見した場合、httpwatchまたはW3Cブラウザのネットワークパネルを通じてデバッグできます。
httpwatch:
ファイアバグ:
Google:
③ 開発中のロジックエラーへの対処方法
demo06.php
注: 実際のアプリケーションのケースでは、Ajax+PHP を使用してユーザー名が一意であるかどうかの検証を完了できますが、実行時に上記のケースでは IE ブラウザーでキャッシュの問題が発生し、異常が発生することがわかりました。実際のプロジェクト開発、この問題をどのように解決するか?
IE ブラウザで初めて特定の URL アドレスに get リクエストを送信すると、システムはリクエストされたリソース ファイルを自動的にキャッシュし、クライアント ブラウザに保存します。このファイルを「IE キャッシュ」と呼びます。
Microsoft は、独自の IE ブラウザでキャッシュ テクノロジを使用して、ユーザーがサーバー側の応答データを迅速に取得できるようにします。
実装プロセス: IE ブラウザがリクエストされたリソース ファイルをキャッシュした後、次回同じ URL にリクエストが送信されるときに、システムはキャッシュされたファイルを自動的に呼び出します。ただし、サーバー側のデータが更新されると最新のデータをリアルタイムに取得できないという実用化の欠点もあります。
実行結果:
注: 乱数を使用してリクエストの URL アドレスを人為的に変更し、各リクエストの URL が矛盾するようにすることもできます。ただし、乱数は生成される乱数が毎回一意であることを保証するものではなく、重複が発生する可能性もあります。また、リクエストが行われるたびにキャッシュファイルが生成されるため、クライアント側では乱数によって大量のキャッシュファイルが生成されてしまいます。
実際の開発では、タイムスタンプが決して繰り返されないことがわかっているため、この方法を使用してキャッシュの問題を解決できます。
実行結果:
注: タイムスタンプを使用してキャッシュの問題を解決できますが、クライアント上に大量のキャッシュ ファイルも生成されます。
キャッシュコアメカニズム:
キャッシュの問題を解決したい場合は、キャッシュの問題を解決するためにチェックされるたびにサーバーのリソース ファイルと矛盾するように If-Modified-Since の値を人為的に変更できます。
実行結果:
注: 上記のプログラムはキャッシュの問題を解決できますが、大量のキャッシュ ファイルも生成されますか?
答え: いいえ、毎回リクエストする URL アドレスは同じであるため、2 回目のリクエストが行われると、システムはキャッシュ ファイルを更新するだけで再生成しません。
次のメニューをサーバー側のページに追加すると、現在のページをキャッシュしないようにブラウザに指示でき、それによってキャッシュの問題を解決できます。
ヘッダー関数の主な機能: ブラウザーに特定の操作を実行するよう指示することは、リクエストされるたびに最新のデータを再取得する必要がないことをブラウザーに指示することを意味します。キャッシング。
実行結果:
上記のプログラムは、究極の解決策であるキャッシュを根本的に無効にします。
① パラメータを渡すさまざまな方法
get リクエストは、パラメータを渡すときに URL の末尾にパラメータを追加します。
ポストリクエストでパラメータを渡すとき、パラメータはリクエストの空行位置に追加されます
② セキュリティの違い
Post リクエストのセキュリティは Get リクエストのセキュリティよりわずかに高い
③ パラメータを渡す際のパラメータのサイズが異なる
getリクエストパラメータが渡される場合、最大値は2kbですが、postリクエストには理論上サイズ制限はありませんが、実際のプロジェクト開発では主にphp.iniファイルの影響を受けます。 8Mか2Mです。
④ リクエストヘッダー情報が異なります
リクエストを取得:
投稿リクエスト:
比較すると、post リクエストには get リクエストよりも 1 つ多くのリクエスト ヘッダー情報があります。
Content-type:application/x-www-form-urlencoded
ステップ 1: Ajax オブジェクトを作成する
ステップ 2: コールバック関数を設定する
ステップ 3: Ajax オブジェクトを初期化する
ステップ4: リクエストヘッダー情報を設定する(Content-typeを設定する)
ステップ 5: Ajax リクエストを送信する
ステップ 6: 判断と実行
demo08.php
demo09.php
いわゆる XML は拡張可能なマークアップ言語であり、主に大量のデータの送信と保存を実現します。
PHP は XML 解析操作を実装でき、合計 2 つのソリューションを提供します。
PHP DOM モデル (追加、削除、変更操作の実装)
PHP SimpleXML モデル (クエリ操作の実装)
1) PHP DOM モデル (非標準 DOM モデル)
① メモリ空間を開く
② XMLファイルをメモリにロードしてDOMツリー構造を形成します
【非標準DOMモデル】
【標準DOMモデル】
JavaScript の DOM モデルは標準 DOM モデルです。実際のアプリケーションでは、標準 DOM モデルと非標準 DOM モデルの主な違いは次のとおりです。
非標準 DOM モデル: 点 à を検索し、nodeValue 属性を通じてその値を直接出力します。
標準 DOM モデル: ポイントを見つけるàその子ノードを見つけるànodeValue 属性を通じてテキスト ノード値を出力する
例: Ajax+XML を使用して 2 つの数値の四則演算の結果を返す
使用する知識:
childNodes: 現在の要素のすべての子要素を取得し、データを返します
demo10.php