0

フォーム データをコントローラー アクションに送信する ASP.Net MVC ビューがあります。私は次のようにAJAX呼び出しを介してフォームを投稿するためにjQueryを使用しようとしています:

$("#submit").click(function(e) {
  e.preventDefault();
  $.ajax({                    
          type: "POST",
          url: "/controller/action",
          data: $("#form").serialize()
    });
  });

これはうまく機能し、フォームデータは私が望むようにコントローラーに投稿されます。問題は、コントローラ アクションがリダイレクトを返し、フォームが送信された後、ブラウザがリダイレクト応答で指定された URL の場所にリダイレクトしないことです。Fiddler を使用すると、コントローラーが実際にリダイレクトを返し、リダイレクトによって指定された場所に対して要求が発行されていることを確認できますが、ブラウザーは実際にはリダイレクトせず、クリック ハンドラーの実行後もフォーム ページが表示されます。

$.ajaxを設定する呼び出しに成功ハンドラーを追加しようとしましたwindow.location。これは機能しますが、いくつかの理由から理想的とは言えません。まず、成功ハンドラーでリダイレクトの場所を取得する方法がわからないため、場所をハードコーディングする必要があります。次に、成功ハンドラーでリダイレクトを実行すると、実際にはリダイレクト先に対して 2 つのリクエストが行われます。$.ajaxサーバーから返されたリダイレクトを尊重するための呼び出しを取得するより良い方法があるかどうか疑問に思っています。

4

1 に答える 1

0

AJAX リクエストはリダイレクトを取得します。

AJAX リクエストでリダイレクト URL を返して (を送信せずに300 Location)、AJAX 成功ハンドラーでその URL にリダイレクトすることができます。

于 2013-09-25T15:22:00.800 に答える