2011-08-02 3 views
9

返されたjqXHRオブジェクトが別の要求からリダイレクトされたかどうかを知る方法はありますか?例えば、以下のコードを有する:AJAX URLが301または302ステータスコードでリダイレクトされる場合jQuery.ajaxの応答ステータスを取得するには?

jQuery.ajax({ 
      type:  'POST', 
      url:  'http://example.com/page.html', 
      complete: function(response, status) { 
         console.log(response.statusCode); 
         // do something 
         } 
     }); 

を、応答は、リダイレクトされたページの結果となり、200(OK)ステータスコードを返します。私はこれがjQueryのバグだと思っています(最終的な応答は実際には成功しているので、これが意図された救いのものかどうか本当に分かりません) 元の応答を得ることができません。リダイレクトされたリクエストでのみ利用可能です。上記のコードで

Firebugのは

http://example.com/page.html 302(一時的に移動) http://example.com/redirect.html 200(OK)

XHRを介して、これら2つの要求をログに記録しかし、jQueryのは、第2の要求からのデータを返します。

おそらく、最初のリクエストからデータを取得する方法がありますか?または、応答URLを取得して、元の要求のURLと比較しますか?

答えて

0

おそらく助けることができるツールはwiresharkです。これは無料で、jqXHRオブジェクトで何が起きているのかを知ることができます。

http://www.wireshark.org/ Wiresharkは、UnixおよびWindows用のネットワークプロトコルアナライザです。これまでのところ、このツールを使用してサーフェスをブラシしただけですが、ネットワーク上のマシンと他のマシンとの間のリクエストを分析する際は便利です。

開始する前に - Wiresharkはすべての要求をキャプチャします。キャプチャする準備ができたらクリックし、終了したら停止をクリックします。 - あなたはよりおよそanalysing HTTP requests

2

問題は、301または302が原因標準準拠のブラウザによって直接処理されていることである

読むあなたのIPアドレスが必要になります。このステータスコードはあなたのajax呼び出しに渡されません。呼び出しが完了したことを知る唯一の方法は、ハンドラ全体にあります。さらに、完了するために渡されたjqxhrオブジェクトには有用なステータスはありません。 SuccessハンドラとErrorハンドラは決して呼び出されません。

post()メソッドが呼び出されたときにget()メソッドへのリダイレクトを使用して、リソースのルビを介して更新されたビューを表示できる従来のRubyキャンプ用コードがありました。キャンプビューからJavaScriptビューに切り替えたとき、301/302はjqxhrオブジェクトに渡されませんでした。投稿の方法を書き換えて、問題を解決するために200を返さなければなりませんでした。

ここでは、対象に関するいくつかのスタックオーバーフローの投稿があります。

How to manage a redirect request after a jQuery Ajax call

Catching 302 FOUND in JavaScript

HTTP redirect: 301 (permanent) vs. 302 (temporary)

関連する問題