0

いくつかのajaxOptions変数を定義してそれをAjax.BeginForm:に渡すajaxフォームがあります。

var ajaxOptions = new AjaxOptions
                      {
                          HttpMethod = "POST",
                          LoadingElementId = "loading",
                          OnBegin = "Base.loadingButton('#RegisterSubmit');",
                          OnSuccess = "Register.onSuccess",
                          OnFailure = "Base.onError"
                      };

BaseすべてのJavaScript関数は、、、 ...などの特別な名前空間で定義されていRegisterます。

フォームを送信してサーバーでエラーが発生すると、コード: "0"、タイプ: "Sql"が発生し、elmahでログに記録され、ステータスコード: "HTTP / 1.1302Found"がサーバーから返されます。

質問1:
OnSuccessステータス302が返されたこの場合でも関数は常に起動します(ただし、OnSuccessはステータスコードが200の場合にのみ起動する必要があります!!!)、なぜですか?

質問2:
ステータスコードが200であっても、関数が起動しない ことOnSuccessがあります!!!、なぜですか?

4

1 に答える 1

4

質問 1: OnSuccess 関数は、ステータス 302 が返されたこの場合でも常に起動されます (ただし、OnSuccess はステータス コードが 200 の場合にのみ起動する必要があります!!!)、なぜですか?

これは、リダイレクトするサーバー側スクリプト (ステータス コード 302) に対して AJAX リクエストを実行すると、AJAX がターゲットの場所へのリダイレクトに従い、最終的にステータス コード 200 で終了するためです => リクエストが成功したため、OnSuccess が発生します。それについてできることはあまりありません-それはAJAXの仕組みです-302ステータスコードをインターセプトすることはできません.

これを使用して、ログイン ページ シナリオへのリダイレクトを検出していますか? セッションの有効期限が切れた場合などは?このシナリオを処理する適切な方法は、サーバーからの 401 ステータス コードを使用し、OnFailureメソッドでこのイベントを検出することです。FormsAuthentication モジュールが LogOn ページにリダイレクトするのを防ぎ、代わりに 401 ステータス コードを送信するには、following article.

質問 2: ステータス コードが 200 であっても、OnSuccess 関数が起動しないことがあります!!!なぜですか?

何らかの JavaScript エラーがない限り、ステータス コードが 200 の場合、OnSuccess は常に起動する必要があります。

于 2012-11-23T08:38:06.727 に答える