フォームデータをコントローラアクションに送信するASP.Net MVCビューがあります。私はjQueryを使ってAJAX呼び出しでフォームをポストしようとしています:
$("#submit").click(function(e) {
e.preventDefault();
$.ajax({
type: "POST",
url: "/controller/action",
data: $("#form").serialize()
});
});
これはうまくいく、フォームデータは、コントローラーは私が望むように。問題は、コントローラのアクションがリダイレクトを返し、フォームが送信された後、ブラウザがリダイレクト応答で指定されたURLの場所にリダイレクトしないということです。 Fiddlerを使用すると、コントローラーが実際にリダイレクトを返し、リダイレクトで指定された場所に対して要求が発行されますが、ブラウザーが実際にリダイレクトされないことがわかります。クリックハンドラーの実行後もフォームページは表示されます。
私は成功ハンドラを $.ajax
セットを呼び出す window.location
。しかし、これは理想的ではないようですいくつかの理由から。まず、成功ハンドラでリダイレクト場所を取得する方法を知りませんので、場所をハードコードする必要があります。次に、成功ハンドラでリダイレクトを実行すると、実際にリダイレクト場所に2つの要求が行われます。 "もしかすると、もっといい方法があるのだろうか?" $.ajax
サーバーから返されたリダイレクトを尊重するための呼び出し。
回答:
回答№1は0AJAXリクエストはリダイレクトを取得します。
AJAXリクエストでリダイレクトURLを返すことができます( 300 Location
)、AJAXの成功ハンドラでそのURLにリダイレクトします。