2009-06-02 8 views
5

ユーザーがWebアプリケーションにデータをポストしたばかりで、現在のページに成功または失敗のメッセージを再表示するとします。これは複雑になります。HTTP POSTから送信できるすべての方法をどのように処理しますか?

データが有効で、ユーザーがhtmlが必要な場合は、リダイレクトを発行して、リフレッシュによって再ポストされないようにしたいとします。リファラーが存在する場合はそれをリダイレクトして、メッセージを表示します。彼らがhtmlを期待していない場合は、単に200 OKを返すことができます。

データが無効で、ユーザーがhtmlを予期している場合は、表示されたページを再レンダリングして、再表示できるように目に見えるエラーを表示します。これを行うには、以前の操作を実行し、エラーメッセージを認識させる必要があります。前のアクションがどれかを決定するために、おそらくフォームに隠れたパラメータとしてそれを含めました。 htmlを期待していない場合は、該当する4xxクライアントエラーを返すことができます。

私は自分自身がこの愚かなダンスを何度もやっていることがわかります。したがって、質問は次のとおりです。

1)どのようにフォームの投稿でも活用できるように、このプロセス全体を抽象化しますか?

2)あなたのお気に入りのWebフレームワークでこれを達成するには、最もメンテナンス可能な、

3)この全体のプロセスを簡単にするために変更することはありますか?

アイデア1:投稿にはレンダリングしないでください。常にリダイレクトされます。成功メッセージと同じように、エラーデータをセッション間で分割してリクエスト間に入れ、クリアします。そうすれば、有効な投稿と無効な投稿を同じように扱うことができます。

アイデア2:通常のHTTP投稿をしないでください。 ajaxだけを使用してください。レンダリングやリダイレクトを心配する必要はありません。これは、すでにajaxに重いアプリケーションがある場合にのみ役立ちます。

答えて

0

JavaScriptを使用せずにまともなWebアプリケーションを作成することはあまりにも多くの作業です。私はこれらの状況でAJAXを使うつもりです。

3

アイデア2がウィンドウの外にあります。それは恐ろしい考えであり、まったく必要ではありません。 AJAXは素晴らしいですが、それをやりすぎてはいけません。言い換えれば、Javascriptを無効にしたユーザーのチャンクはどうですか?

あなたは(実際にそれを知らないうちに)考えているのはPost/Redirect/Getパターンだと思います。それはこれになるとベストプラクティスであり、それに従うべきです。あなたが言ったように、基本的には、リダイレクト以外の何かによってPOSTに応答します。限り通知まで、ほとんどの時間を知っている特定のアクションのために来ているところ。そうしないと、HTTP REFERERはまともな選択肢です。はい、無効にすることはできますが、その場合はユーザーの約1%です。通知に関しては、セッションはこれには完璧です。現在のセッションにコードとメッセージを格納し、テンプレートにそれらを認識させるだけです。存在する場合はメッセージを出力し、セッション変数を削除します。

+0

私はどこから来ているのか分からないと仮定しています。私はしばしば、異なるページから同じURLに投稿して、アクションを再利用したいという状況に遭遇します。データが無効で、リダイレクトする代わりにレンダリングしている場合は、前の操作を直感的に理解する必要があります。私はまだリファラーからこのことを知ることができると思います。 –

0

ポストバックを行うことには恥ずかしいことはなく、ポストバックを避けることはできません。これは、HTTP要求を超えてデータを永続化する最も簡単な方法だからです。それは、サーバーへのさらに別のラウンドトリップであるため、それはいくつかのトレードオフを伴って同じことになります。ビューの状態やセッションの使用はお勧めしません。

理想的には、リクエストがポストバックであるかどうかをチェックし、そこにあるすべてのロジックを処理します。フォームやフォームのアプリケーションページには、ポストバックを処理するセクションがあります。

+0

ポストバックとは?ビューステートは何ですか? –

関連する問題