Ajaxで非同期クラスの実装

非同期のXMLHttpRequestを決定持つ移動するための方法は、非同期のカプセル化クラスが定義されます。カプセル化のクラスが必要ではありませんが、それが簡単にXMLHttpRequestオブジェクトを操作することができます。カプセル化クラスを使用する主な利点は、コードブロックを使用して、XMLHttpRequestオブジェクトの関連付けです。回復については、のコードを見て、再びAtomフィードの読み込みにしましょう:

関数LoadAtomFeed()(ヴァール非同期=新しい非同期(); asynchronous.settings =(onComplete:(XMLHTTPを)(parseAtom()xmlhttp.responseXML;();))asynchronous.get("/サービス/ブログ/ flexbox.update関数エントリ/電流");)
  

非同期クラスを動作させるためには、ユーザーが2つのことを行う必要があります:いくつかの情報を使用して設定データメンバを関連付けると、適切なメソッドを呼び出す(取得)は、HTTPリクエストを作成する例。設定データは、メンバの目的は、コールバック、および追加情報の要求に関連付けられて提供することです。一度は、HTTPリクエストが完了している例では、onCompleteメソッドが呼び出されます。

このコードは、現状ではかなり理解し、簡単ですが、覚えているコードは非同期です。結果として、asynchronous.getメソッドは、LoadAtomFeed関数onCompleteを呼び出し、ユーザーに制御を返す前に終了すると呼ばれます。最悪のシナリオでは、ユーザーがクリック夢中になると、ある要求の数十される可能性が行われる。代替は、ブラウザのロック同期呼び出しを使用することであり、それ自体のオプションではありません。肯定的な側面では、非同期動作では、ユーザーのタスクを起動して結果を待つことができます。プログラマの警戒とは、ユーザーが彼の前を取得しない、もしくは自分自身を確認のままにしています。今ではどのようにしましょうでは、非同期の実装の詳細を見て、非同期クラスの使用方法の基本を理解している。このクラスは、各HTTP動詞のメソッドを公開し、getメソッドの例では、HTTP GET動詞に相当する。の実装として使用され得る次のとおり:

関数HttpRequest_get(strurl)(this.call((アクション:""、のURL:strurl))のGET;)

HttpRequest_getは、Asynchronous.get、関数呼び出しへの参照にマップされての実装で行われます。この関数は、メソッドを呼び出すための便利なメソッドです取得します。メソッドを呼び出す1つのパラメータ:特定のデータメンバを持つオブジェクトを受け入れます。 getメソッドの場合には、アクションとURLのデータメンバに定義されます。なぜ、オブジェクトのとき、メソッド呼び出しの2つのパラメータ、アクションとurl、使用している可能性が作成する?答えには、JavaScript関数のオーバーロードを理解していないの柔軟性であり、そこには1つの関数のパラメータの1つのセットにすることができます。これにより、開発者(例えば、どのパラメータが、どのような順序など)、データメンバを持つオブジェクトが作成されている組み合わせとパラメータを組み合わせゲームをプレイする必要はありません。

非同期の最も重要なメソッドを呼び出すため、関係なく、どのHTTP動詞は、メソッドが実行されますが使用されます。次のコードを呼び出すの完全な実装です。

 ソース: 

私は今始めから終わりまでを呼び出す方法を説明するだろう、と私は、いくつかのreiterationsを使用して、個々のコードの断片を繰り返すだろう短縮形です。私は再びここで、理解を容易にするための適切なコールの実装としては比較的長いですが、さまざまなもののコードを示しています。上部の料金は、インスタンス変数には、この値に割り当てられている:ヴァールインスタンス=は、この割り当てが必要ですこれは、コードブロックは、onreadystatechangeデータメンバに割り当てされるコードブロックで参照されているが、非同期のインスタンスを覚えています。代入の後、我々は、設定データは、メンバーが移入されている検証:

場合(!this.settings)(新しいエラーをスローする("設定")で定義されていません;)

設定データは、メンバーがそれについてのメソッドは、要求が完了したとは、リクエストに追加するHTTPヘッダーを呼び出すための情報が含まれて存在している。この時点で、その2つのオブジェクトを呼び出すメソッドを動作させるために必要な通知をする必要があります。最初のオブジェクトの設定、および2番目のオブジェクトは、要求のパラメータです。ショートカットとして、開発者の1つには、いずれかの2つのオブジェクトを組み合わせる可能性があるメソッドを呼び出すに渡すか、設定データメンバに割り当てます。これは、各オブジェクトが別の目的を持ってこのショートカットは、見当違いだろう。

リクエストオブジェクトは、特定のURLリクエストの設定を定義するために作られて使用されます。設定の設定を定義するために、すべてのコールを超越非同期オブジェクトインスタンスの考えグローバルなコールバックされる可能性が使用されるオブジェクトです。アイディアは、非同期のインスタンスを割り当てるどのように動作するかを定義し、別のURLを呼び出す可能性の要求を作り始めたのです。それから、次の手順では、現在のXMLHttpRequestのインスタンスがすでに夢中にされていないことを確認することです:

場合(this.xmlhttp.readyState!= 4&&this.xmlhttp.readyState!= 0)(("現在アクティブなリクエストを続行できません")の新しいエラーがスロー;)
 

非同期モードではXMLHttpRequestを使用し、それを実行するXMLHttpRequestのインスタンスに新しいHTTPリクエストを作成することが可能です。問題は、XMLHttpRequestの2つの要求を提供することはできません、それはすでに実行中の要求が新しい要求をすることを停止することです。 readyStateプロパティがXMLHttpRequestオブジェクトの状態を示すために使用されます。場合はreadyStateが0の場合は要求されてきたHTTPリクエストを行うことができます。場合はreadyStateが4である場合、要求の要求、およびオブジェクトが別の要求を作成する準備が完了して作られています。場合はreadyStateが他の値は、要求し、実行されているため、別の要求が意味をなさないを実行した後の初期化やチェックが完了して、それを要求することが可能です:(request.action、リクエストthis.xmlhttp.open 。urlに、this.settings.password this.settings.username)はtrueを開くメソッドを呼び出す場合、aminimum HTTP動詞で指定する必要があります(は、GET、例えば、POST)をrequest.actionデータメンバは、URLを経由request.urlデータメンバ。するたびに、確認には、最初のアクションは、openメソッドは任意のXMLHttpRequestをリクエストする場合は開いて呼び出す前に、onreadystatechange関数を割り当てると、お客様のリクエストが正常に動作しません。場合はオープンを呼び出す前にリクエストヘッダを割り当てるには、お客様のリクエストが正常に動作しないとします。 openメソッドを初期化し、新しいリクエストを作成使用されます。開いて、そのように送信者の責任されているサーバーを呼び出すことはありません。

openメソッドの例では、ユーザ名とパスワード(this.settings.usernameとthis.settings.password、それぞれ)は、常にサーバーに送信され、ない場合でも、ユーザー名とパスワードです。これは、NULL値を送信する問題はありません、それはHTTP要求の動作には影響されません。ユーザ名とパスワードの入力だけは、HTTPサーバはチャレンジを実行し、ユーザー名とパスワードの入力を要求されます。 XMLHttpRequestオブジェクトは、ユーザ名とパスワードのコンテキストでは場合にのみ、XMLHttpRequestの基礎となる実装では、情報が必要に使用されます。後は、要求を開設した場合、ヘッダーsetRequestHeadersメソッドを使用してカスタムHTTPを追加することができます:

request.headersで(defHeader)(this.xmlhttp.setRequestHeader用(request.headers)((defHeader、request.headers [defHeader]);))の場合(this.settings.headers)(this.settingsで(defHeaderの場合。ヘッダー)(this.xmlhttp.setRequestHeader(defHeader、this.settings.headers [defHeader]);))

ヘッダーを2回割り当てられている:この設定は、要求のグローバルな設定(this.settings.headers用)(request.headers)と一度に関連付けられて一度。は、標準的なことができるHTTPヘッダーまたはカスタムヘッダーを割り当てるヘッダー。場合は、HTTPヘッダーのカスタムを使用しての計画は、常にXでそれらの接頭辞には良いアイデアです。こうすることで、あなたのヘッダーを標準のHTTPヘッダーと混同されることはありません。したら、ヘッダーに割り当てて、onreadystatechangeコールバック関数を割り当てられている:

場合(instance.settings.onLoading)((instance.xmlhttp);)ブレーク;ケース2:instance.settings.onLoading this.xmlhttp.onreadystatechange =関数()((instance.xmlhttp.readyState)(ケース1:スイッチの場合( instance.settings.onLoaded)((instance.xmlhttp);)ブレーク;ケース3:instance.settings.onLoaded場合、()((instance.xmlhttp);)ブレーク;ケース4:instance.settings.onInteractive instance.settings.onInteractive場合は()instance.settings.onComplete()(instance.settings.onComplete(instance.xmlhttpしよう;)(電子)(globals.errorHandler(電子);))チャンスをつかむ;)

onreadystatechangeの非同期実装では、switch文の4つの有効な準備の状態を実行します。ソースから、それぞれの数字が特定の状態に関連付けることができます。最も重要な準備の状態では、コンテンツが取得されて読み込まれ、処理を示す4です。 4準備完了状態にする方法の設定では、クライアントによって定義のプロパティを呼び出します。通知は、割り当てられてonreadystatechange関数の実装では、インスタンス変数は、これを参照に置き換えています。

onreadystatechange関数の実装は、非同期の場合のみ4準備完了状態を気にするを使用する時点での98%は過剰です。他のすべての準備状態のは、ブラウザによっては、特定の機能が可能です。 XMLHttpRequestオブジェクトの状態の不完全性は、この矛盾のためとは、実際にはないが、他の準備状態を処理することです。残りの呼び出し関数のコードは、サーバーの送信機能を使用して要求を送る必要:

((request.data);)キャッチthis.xmlhttp.sendしてください(メール)(globals.errorHandler(電子);)

サーバーに物理的な要求をするために使用され関数を送信します。またこの関数は任意のデータは、要求に関連付けられて送信するために使用されます。データがない場合は、null値を持つエラーは生成されません送信呼び出しているとき、その要求したメソッドを送信すると、すぐに、結果を返しますは、JavaScript Asynchronous_call関数は、ブラウザに制御が返されます。この時点で、クライアントが複数の呼び出しを許可しないようにいくつかのコードを追加する必要があります。たとえば、リクエストボタンを使用して、その活性化されるまで要求すると、ボタンは無効にされる可能性が戻ってきた。もちろん、この潜在的な問題の場合は、要求はないが返され、ボタンを無効のまま紹介します。その問題を解決するには、リクエスト時の最大量を与えるタイマーを導入することができます。その時間中の場合は、要求がまだ戻っていないXMLHttpRequest.abortメソッドが呼び出され、ボタンを再度有効になります。

記事は、ソニアLandeを提出


免責事項:弊社のウェブサイトは、この資料の内容については責任を負いません。 Webarticles無料の情報リソースです。
重要: この記事は、""Ajaxで非同期クラスの実装の自動ソフトウェアによって翻訳された。大変申し訳ございませんが発生した可能性があります任意のスペルミスを感じている。お客様のご理解いただき、ありがとうございます。


Online: 320 users browsing the articles directory