2012-04-04 20 views
13

私はアクションを実行するためにAjax POSTをディスパッチするリンクを持っています。ユーザーがまだサインインしていない場合、アクションメソッドはログインページに302リダイレクトを返します。このような場合は、リダイレクトをキャッチして、ライトボックスにログインフォームを表示することができます。投稿の後にjQuery ajaxがリダイレクトするのを防ぐ方法は?

しかし、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; } 
     }); 

答えて

11

これはjQueryではなくJavaScript自体であり、 JavaScriptのAJAXリクエストでリダイレクトを検出する方法はありません。ブラウザのXHRオブジェクトは、自動的に魔法の目に見えなくなり、the specのようにリダイレクトに従います。

サーバーコードのキャッチをdetect an AJAX request( "HTTP_X_REQUESTED_WITH"ヘッダー)に追加し、JavaScriptで匿名ユーザーを検出する特別な応答を返し、適切に処理するのが理想的です。

関連する問題