16

アクションを実行するために Ajax POST をディスパッチするリンクがあります。ユーザーがまだサインインしていない場合、アクション メソッドはログイン ページへの 302 リダイレクトを返します。これが発生した場合、ログイン フォームをライトボックスに表示できるように、リダイレクトをキャッチしたいと考えています。

ただし、jQuery は、制御を返したり、コールバック関数を呼び出したりせずに、リダイレクトに従っているようです。以下のコードでは、302 リダイレクトのアラートが呼び出されることはなく、dataFiler 関数が呼び出されるまでに、データはログイン ページのコンテンツになります。

ページが 302 リダイレクトを送信し、別のアクションに分岐したことを確認するにはどうすればよいですか?

 $.ajax(url,
        {
            data: postArguments,
            type : "POST",
            success: function (data) { alert(' success function'); },
            statusCode:
            {
                302: function () { alert(' received redirect 302'); },
                301: function () { alert(' received redirect 301'); }
            },
            dataFilter: function (data, type) { alert('got data ' + data); return data; }
        });
4

1 に答える 1

14

これはjQueryの制限ではなく、JavaScript自体の制限です。JavaScriptのAJAXリクエストでリダイレクトを検出する方法はありません。ブラウザのXHRオブジェクトは、仕様に従って、自動的に、そして目に見えない形でリダイレクトに従います。

理想的なオプションは、サーバーコードにcatchを追加してAJAXリクエスト( "HTTP_X_REQUESTED_WITH"ヘッダー)を検出し、JavaScriptで匿名ユーザーを検出するための特別な応答を返し、適切に処理することです。

于 2012-04-04T15:04:40.877 に答える