web-dev-qa-db-ja.com

ポストバックとコールバックの違い

この言葉「callback」と「postback」が放り投げられているのを聞き続けています。
2つの違いは何ですか?

ポストバックはASP.NETページに非常に固有ですか?

114
Biswanath

ポストバックは、ページ上のデータ(ページ全体)がクライアントからサーバーに投稿されると発生します。つまり、データがサーバーに投稿されます、したがって、ページが更新(再描画)されます... 'と考えてください。サーバーにデータ全体のページ全体(asp.net)を送信する '。

一方、コールバックも特別な種類のポストバックですが、小さなセットを取得するためのサーバーへの簡単なラウンドトリップですデータの(通常)、したがってページは更新されません。ポストバックとは異なり、...サーバーを呼び出し、someデータバック '。

Asp.Netでは、ポストバックの場合とは異なり、コールバックが呼び出されたときにViewStateは更新されません。

ASP.Netでページ全体が投稿される理由は、ASP.Netがpostメソッドでページ全体を<form>で囲むためです 、そのため、ページで送信ボタンをクリックすると、フォーム内のすべてのフィールド(基本的にはページ全体)とともにフォームがサーバーに送信されます。

FireBug(Firefoxの場合)を使用している場合、Consoleで実際にサーバーに呼び出されるコールバックを確認できます。そうすれば、サーバーに送信されている特定のデータRequest)とサーバーから返されたデータ(Response)。


以下の画像は、ASP.NETベースのWebサイトでのポストバックとコールバックの両方のページライフサイクルを示しています。

ASP.NET Page Life Cycles
(ソース: esri.com

201
Andreas Grech

ユーザーが現在表示しているページと同じページの要求がクライアントからサーバーに送信されると、ポストバックが発生します。ポストバックが発生すると、ページ全体が更新され、ブラウザの下部にある進行状況バーで一般的な進行状況を確認できます。

一般にAJAXで使用されるコールバックは、クライアントからページが更新されないサーバーにリクエストが送信されたときに発生し、ブラウザでちらつきが発生することなくその一部のみが更新されます

18
Sanket

Dreasの答えには同意しますが、いくつかの点を追加したいと思います。ポストバックは、Dreasが説明したようにASP .NETプログラミングによってごく最近導入された用語ですが、コールバックはより一般的であり、Web開発が存在する前に使用されてきました。 Cでプログラミングを始めた頃(おそらくその用語はその前に存在していたかもしれませんが、私は知りません)、それは単に関数へのポインタを意味し、関数へのこのポインタ(このAという名前)は別の関数(これという名前B)後でAを呼び出します。コールバックは最近、 Yahoo UI Connection Manager およびその他のAjaxフレームワークでも使用されていますが、この用語は以前のC時代に初めて使用されたと思います。

5

この議論の多くは、ASP.NET gobbledygook言語です...

答えはイエスです。ポストバックはMicrosoftのASP.NETに固有の「用語」ですが、Microsoftのようなベンダーは、これらのプロセスの独自バージョンをそれらの独自の実装にラップし、Http/Htmlの世界で実際に何が起こるかを混乱させます。

POSTBACKのバージョンは、基本的に、元のサーバーに送り返される従来のHTTP POST要求です。しかし、ASP.NETでは、Webページのごく一部の従来のフォームコントロールではなく、Webページ全体に巨大なFORM HTML要素タグ(POST method属性を付けて)を貼り付けます。これは、ページとそのコントロールの「状態」を維持するためにHTTP仕様を使用しており、ページ全体が従来の非フォームフィールドマークアップであっても元の状態に戻っていることを確認するためです。

残念ながら、これは膨大な量の不必要なデータをネットワーク経由で送信するため、ページ内のVIEWSTATEおよびその姉妹POSTBACKは、帯域幅の浪費およびWebページの状態を実装するずさんな方法として多くの人に見られるようになります。キャッシュ可能なCSSと一貫したHTMLマークアップを使用して設計されている場合、ほとんどの最新のブラウザーとWebサイトは、ブラウザーのネイティブHTMLキャッシュを使用して非常に自然にページ状態を返すことを示します。すなわち、多くの場合、完全なPOSTBACKは不要です。

CALLBACKは単なるJavaScriptです。そのECMASCRIPTサーカスは、ブラウザーがサーバーからダウンロードする巨大なJavaScriptライブラリにAJAX AP​​Iと呼ばれるものをASP.NETに保存し、ASP.NET開発者が知らないうちにWebページにパックして変更をトリガーする完全なPOSTBACKのないWebページ。 AJAXのASP.NET APIは、クライアント側にあり、ユーザーが何かを変更したり、ロールオーバーしたり、ブラウザーで従来のトリガーをクリックしたりすると、ブラウザーでトリガーされるすべてのこの巨大なJavaScriptを作成します。 JavaScriptブラウザーのDOMイベント。JSONまたはその他のデータの巨大な負荷をサーバーに送り、処理します。その後、ブラウザのメモリ内のJavasciptedライブラリとオブジェクトによって返され、受け入れられ、ユーザーのWebページとマークアップの一部を変更します。

ユーザーとブラウザの約5〜10%でJavascriptが無効になっているため、このJSONとAJAXはすべてクラッシュし、それらのユーザーに焼き付くと言われています。つまり、CALLBACKは機能しません。

それが舞台裏で起こっていることです。あなたが私に尋ねると、それの多くは行き過ぎです。これが、ASP.NETのWeb Controlモデルが過去に批判されてきた理由です。

ASP.NETをしばらく放棄した場合、ASP.NETページとまったく同じように、テキストボックスとボタンが1つあるHTML Webページに単純なFORMフィールドを自分で記述し、それを押してサーバーに投稿するのを見ることができます。より速く、より簡単に。それが本当のPOSTBACKです。ブラウザは、サーバーにそうするために必要なPOST HTTPヘッダーを自然に送信しますが、HTMLをページの残りの部分にキャッシュするので、それ自体で稲妻を高速にレンダリングします。

CALLBACKの場合、単純なJavascript/ECMAScriptコードを同じHTMLページに追加するだけで、ユーザーがテキストまたはボタンをロールオーバー、クリック、またはフォームフィールドを変更すると、WebページはPOSTされませんが、背後でJavascriptがサーバーに何かを送信するようにします。独自のJavaScript、JSON、またはライブラリを介してそれを処理する方法は、別の取り決めです。しかし、魔法ではありません。 JavasciptまたはJavascriptが無効になっていない場合は、CALLBACKのないページを設計し、フォームフィールドコントロールまたはハイパーリンクがクリックされたときに返される変更をキャッシュする必要があります。現在のほとんどのユーザーエージェントはECMAScripted Webサイトルーチン用にセットアップされていますが、コールバックルーチンを再検討する1つの理由です。

それは人々を混乱させるものです......非常に基本的なHTTPリクエストとJavascriptのトリックのこれらのベンダーの実装は、明確ではない言語に階層化されます。その後、人々は、非常に単純なコーディングで解決できるこのような不必要なことをすべて行う巨大なWebアプリケーションを作成します。

私はまだASP.NETを使用し、推奨しています。それは長い道のりと素晴らしいシステムです。しかし、実際に何が起こっているのかを見ると、これらのフレームワークを大幅にカスタマイズおよび簡素化して改善できるため、より多くの人々が使用前に何をするのかを理解しておくと役立ちます。

3
Stokely

ポストバックは、基本的にラウンドトリップと呼ばれる特別なメソッドを呼び出すときにポストバックが実行されるときのラウンドトリップでもあります。

0
rohit

リクエストがサーバーに送信されると、ポストバックが発生します。各リクエストのセキュリティに関する詳細を指定する必要はありません。

U他のページのコールバックがサーバーによって使用されるように要求するとき

0
yaseen