あなたのフォームのAjaxに提出しないでください商品彼の記事のデータは、HTTP POSTを使用して送信する問題を解決する上で、両方の焦点を当てて、そのHTMLページに関連付けられている状態の定義に、この資料には、次のとおりです: •説明問題がHTTP POSTを関連付けられて どのように問題がHTTP POSTをに関連する修正する• •イラストワークフローのアーキテクチャ
•協会の状態のハンドラを持つ 問題 いくつかの問題のフォームのPOSTを使用して従来の方法で提出に関連付けられて解決するためにAjaxを使用してください。 理論 ソリューション Webアプリケーションフレームワーク大きなエクステントには、HTTP POSTの問題を解決するために行っている。あなたがそれ以上のよりは、ASP.NETフレームワークは、ブラウザの[戻る]または[更新]ボタンは、サーバーサイドの状態を尊重すると問題が山のような原因としない複雑なことを確認するに関与参照してくださいに目を向ける必要があります。これは、クリエイター、古い静的なWebインフラストラクチャにダイナミックなアーキテクチャに適合しようとしているASP.NETは、非難されることではない。次の点の合計の利点は、このアプローチを使用して: データ•サーバーに一度だけ送信される場合にのみ、ユーザーを押すとフォーム送信ボタンを押します。 アプリケーションの状態は、HTTPのGETを使用することができますときに、特定のHTMLページと呼ばれますを呼び出して、サーバー側ストア•。したがって、ページ間の破損は、サーバーサイドの状態、またはクライアント側のHTMLページをせずに移動するにはブラウザの[戻るとブラウザのForthのボタンを使用することができます。 への変換 POSTの を使用する XMLHttpRequestを オブジェクト HTTP POSTの問題への解決策は単純ですが、その能力は、XMLHttpRequestオブジェクトを使用する必要があります。このセクションでは、どのように新しいアーキテクチャを使用して、元のアプリケーションを変換する方法を学びます。オリジナルと新しいHTMLページのコードレベルで説明されます。このセクションのアイデアは、変換を説明することです。 オリジナルのHTMLフォーム 元のHTMLフォーム、およびHTTP POSTを使用するとして示されています次のとおり:
大胆な形の属性をするときに[送信]ボタン/ ajaxrest記事/アーキテクチャ/フォーム/ Posted.ashx POSTを使用して呼び出されているURLを押すと表示されます。具象State Transferの(残り)の観点からは、URLを1つだけの動詞は、POSTを受け入れます。これは、このページには、これはデフォルトのHTTP動詞のブラウザで使用されてのGETを使用して取得できない場合には、問題の心臓部です。 変換されたHTMLフォーム 変換されたHTMLフォームと同じHTML構文を使用しますが、XMLHttpRequestをすることの代表は、POST、次のページのGETを使用して取得します。次のコードに変換されたHTMLフォームを示しています:
HTMLページの重要な修正部分は太字で表示されます。全体的な変更ボタンを提出するのは、入力タイプに変換し、されているし、ボタンのクリックイベントを実装している。 clickイベントとは、POSTを行うとGETのために責任があるがonSubmitを呼び出すときがonSubmit、この関数はRepresentationManager.iterateHTML.getは、HTMLフォーム要素の状態を抽出するために使用されて呼ばれると呼ばれます。通常は、前のHTMLフォームを使用して技術を送信すると、ブラウザは、HTMLフォームからの状態の抽出を管理します。それ以上のカスタムの抽出を実行するには複雑ですが、それの付加的な利点を提供しませんdivまたはspan要素など、他のHTML要素からの状態を抽出することである。あなたは一般的な状態の抽出のメソッドを呼び出すのGET考える必要があるには、JavaScriptのオブジェクトに割り当てられます。 ときにJavaScriptのオブジェクトは、状態が作成されているが含まれる場合は、コンピュータグラフィックスインターフェイス(CGI用)にオブジェクトを変換するためにクエリ文字列エンコードが必要です。関数Ops.serializeCGIの変換を実行します。この場合も、カスタムのシリアル化を実行する必要がありますが、CGIをシリアル化する追加の柔軟性、エンコードされたクエリ文字列が、はJavaScript Object Notation(JSON)は、あるいはXML文字列を保持しするときには、CGIのクエリ文字列が、場合は、サーバーにデータをPOSTにonSubmit検証の残りのコードを使用します。通知は、POSTのURLを使用したHTMLフォームから送信されます。 1回は、POST onCompleteメソッドの実装を完成されており、location.hrefそれにPOSTされたURLが割り当てられます。 ここで混乱してしまう可能性がありますここです。なぜ最初のPOSTをクリックし、同じURLのGET?これより、単一のPOSTまたはGETを実行する方が効率的に思えるかもしれない。 2つの動詞を実行する理由は歴史のブラウザのためです。 POSTはXMLHttpRequestオブジェクトによってため、ブラウザの履歴の一部で実行されます。 POSTは、サーバー上での状態を作成し、次に、ブラウザのGETので、そのページには、ブラウザの履歴に記録されて実行されます。結果として、ブラウザではなく、とのGET、POSTのように、元のHTMLフォームの例ではそうだった歴史の中で2つのGETをしています。いつの歴史の中で2つのGETをしたとしての状態を取得する場合は、サーバーの状態を送信する必要はありません。クライアントは、まだ同じURLを呼び出し、サーバーのURLの機能を変更しています。変更されたHTMLフォームの例では、サーバのPOSTに対応するとのGETしています。ただし、サーバーの状態は、元のHTMLフォームの場合は必要ではなかったの要求を関連付ける必要があります。元のHTMLフォームでは、州ごとにPOSTを使用して生成されました。要求状態に関連付けることが困難にのみ、Webアプリケーションを使用するセッションメカニズムを提供する必要はありません。あなたは、その情報は、POSTによって生成されたセッションに格納されが呼び出されたときのGETを取得したサーバーサイドのコードを変更する必要があります。次のコードは、元のサーバサイドのコードは非常に単純な実装を示しています: 公共の無効のprocessRequest(HttpContextのCTX)の(ctx.Response.ContentType =が"text / html"の; ctx.Response.Write(" あなたが"書き込み+ ctx.Request ["例"] +" ");)ここでは、更新サーバーコード:パブリック無効のprocessRequest(HttpContextのCTX)の(ctx.Response.ContentType ="テキストの/ html"に;場合(ctx.Request.HttpMethod ==が"POST")(ctx.Session.Add( "例えば"、ctx.Request ["例"]); ctx.Response.Write(" あなたが"書き込み+ ctx.Request ["例"] +" ");)以外の場合(ctx.Request.HttpMethod =="")のGET(ctx.Response.Write(" あなたが"書き込み+ ctx.Session ["例"] +" ");)) この例では、ASP.NETを使用しかし、コーディングされている場合でもASP.NETプログラマではない場合は、説明に従うことができる必要があります。のprocessRequestの元の実装では、それは、このメソッドはPOSTを使って呼び出すことが期待された。コンテンツを生成するには、たとえば変数はメソッドctx.Requestを使用して抽出します。のprocessRequestの元の実装として定義されてですが、以前は呼ばれてきたのはメモリです。生成された出力パラメータはPOSTで送信さに依存しています。これは、POSTと想定されている元のコードが安全でないと見なされます。場合をGETので、一貫性のない状態が定義される場合、問題が発生する実行されます。変更後のソースコードでは、まず最初は、(ctx.Requestと呼ばれているHTTP動詞をテストします。HttpMethod)。場合は、HTTP POSTと呼ばれ、その後、生成されたコンテンツは、元のHTMLフォームの例のように、とされている状態は、セッション(ctx.Session)に保存されます。場合、HTTPのGETし、生成されたコンテンツは、POSTに似ている、その状態をセッションから取得されます除くと呼ばれます。 をPOSTフォームとREST 修正された例では、URLを使用して/ ajaxrest記事/アーキテクチャ/フォーム/ AjaxPosted.ashxすると、セッションを使用します。このアプローチの問題は、HTTPクッキーの内容をどのように生成されます決定するために使用されています。解決方法では、比較的容易に1つには、Ajax - POSTの組み合わせを使用してGETはPOSTを使用する既存のアプリケーションを変更することを示すために使用されます。次の場合は、POSTを変更していないセッション変数を使用する組み合わせのGET。または、それより簡潔に、それは彼らにクッキーを使用しない限り、セッション変数を使用するために、OKを入れています。たとえば、ASP.NETのアーキテクチャでは、セッション変数の識別子は、セッション変数へのクロスリファレンスです。インフラストラクチャは、URLを変更持つには、URLとそれを参照articlemarkを可能に含めるために、URLを変更することも可能です時間内の後の時点で。場合は、タイムアウトをセッション変数を使用ただし、問題に実行されます。タイムアウト、セッション変数を、たとえそれが、クッキーを使用しない場合は、問題があるため、ユーザーがURLをarticlemarkedかもしれないと後には参照できませんが判明。ただ、今から非常に長いタイムアウトをセッションのタイム変数を設定することが可能ですが、これは最終的には消えての状態の問題を解決していません。この記事は、あなたが発生する最後のものの場合には国家の消失です。 したがって、再建築は、サーバーの代わりに、セッション変数をキャッシュを使用する必要があります。キャッシュの利点は、それはあなたの能力が国家のピースのまま制御するためには削除されます与えています。次の問題はもう少し複雑です。 HTMLフォームの修正された例では、ページPostAjax.ashxのいずれか、またはPOSTをGETに答えた。いつ呼ばれていたGETの場合、HTMLページやHTMLページ自体の状態を1ステップで結合された。第5条知ってから、その状態が間違っているとは、HTMLページを組み合わせる。あなたaWebサービスを呼び出すように状態をロードできるようにしたい。この2つのURLが必要ということです。第5条に"相対URLを持つHTMLページをサポートする"セクションでは、2つのURLを管理する方法を示します。 •/ workflow/page1/1234:このURLをブラウザで表示されるHTMLページをダウンロードするために使用されます。としては、サーバーからのHTMLコンテンツをダウンロードするために使用されているURLのみGET動詞をサポートしています。 •/ services/workflow/page1/1234:このURLは動詞の両方のPOSTとGETをサポートしている状態のHTMLページのURLに関連付けられます。状態のURLのテクニックを使って作成されているセクションで、"相対URLを持つ"第5条でのHTMLページをサポートすると説明した。両方の例のURLは、独自のキャッシュされたときにデータの状態を読み込んで使用する識別子を表す番号は1234と追加されます。状態ではおよびHTMLページのソリューションは、状態の1つのHTMLページで作成された別のページに委譲されます。戻って変更されたHTMLフォームの例のコードを見てください。 HTMLページの状態は、PostAjax.ashxページに関連付けられている。との状態と、HTMLページのソリューションは、状態が必要なページで、したがって、次のわずかに変更されたHTMLフォームの例の変更の実装に関連する:
太字のコードの状態およびHTMLページのソリューションを実装するために、追加点が必要です。として、第5条で説明したときに、ページが完全には、body.onloadイベントがトリガされ読み込まれていると機能の初期化を呼び出します。の状態での初期化の結果を呼び出すと、URLを使用して取得されて動的に関数URLEngineを使用して計算した。servicesURL。時の状態を取得されており、それが逆シリアル化され、HTMLページのメソッドをserializeFromCGIとiterateHTML.setを使用して割り当てられます。onSubmit検証の実装では、aminor変更場所のURLの状態をPOSTされていると同じです。 POSTのURLが同じでなければなりません1つの初期化関数内でデータを取得するために使用されます。後の状態のまま次のページをロードすると、あなたの好みに合わせて変更することができます。 URLは、次のページ令状はほとんど議論が決まります。 HTMLコードの例では、ロードされたURLは/ ajaxrest記事/アーキテクチャ/フォーム/ AjaxPosted.ashx。 URLには、キャッシュIDと、そのURLを任意の状態に関連付けされていない意味が付加されていません。変更されたHTMLフォームの例では、CookieがURLに関連付けされている状態を定義します。クッキーを使用していないので、URLのない状態にしています。この場合は、その場合は、コードを残すことが、ご希望の効果は同じです。ただし、これはおそらく望ましい効果をされていないので、URLを関連付けるには、キャッシュIDが必要です。そのため、URLを指定する必要があります/ Ajaxのarticles/architecture/forms/1234 / AjaxPosted.ashxまたはそれらの線に沿って何か。重要なのビットは、ユニークなキャッシュIDがURLに含まれている。ただし、URLはハードコーディングされたので、動的なアプローチ第5条に示すように非常に似て変更する必要があります。一言で言えば、あなたのURLのグループを定義する必要があります。たとえば、1つのワークフロー上のURL / workflow/app-name/page1 / workflow/app-name/page2などがあります。それぞれのURLのキャッシュIDに関連付けられている。したがって、いつでも1のURLに移動すると、キャッシュされたデータは、ワークフローアプリケーションに関連付けられて移動することがあります。 は、次の点に注意: •使用して、XMLHttpRequestのPOSTおよびGETの組み合わせを再度"ダイアログボックスでは、恐ろしい、HTTPの"POSTデータを回避できます。あなたが簡単な、あなたの顧客を2回、同じアイテムを購入されない部分ができます。 POSTと別の手順としてGETを持つことにより•すると、Webアプリケーションの効率を最適化することができますので、データをキャッシュすることができますのGETに関連付けられます。 •あなたのWebアプリケーションに大きな変更をするために、別のPOSTメソッドを利用するとGETのように、変更されたHTMLフォームの例に示す必要はありません。 •完全な状態のナビゲーションの実装では、2つで1つのURLは、HTMLページを定義するURLのアプローチは、2番目のURLを使用する状態をWebサービスは、HTMLページによって呼び出さを表します。 •完全な状態のナビゲーションの実装では、国家のためのURLとは、次ページのアルゴリズムで定義する必要があります。 •現在のデータの検証記事第3条に示すように、このソリューションを組み合わせることができます。 URLを関連付けるにキャッシュされたデータには•、あなたが、クッキーを使用してはならないのではなく、URLにユニークなキャッシュの識別子を使用します。これにより、後で参照するために関連付けられた状態のHTMLページarticlemarkすることができます。 記事は、ソニアLandeを提出 免責事項:弊社のウェブサイトは、この資料の内容については責任を負いません。 Webarticles無料の情報リソースです。 重要: この記事は、"かあなたのフォームのAjax彼らを"自動ソフトウェアによって翻訳された投稿はありません。大変申し訳ございませんが発生した可能性があります任意のスペルミスを感じている。お客様のご理解いただき、ありがとうございます。
|
|||||
| Online: 221 users browsing the articles directory |
|
|