9

返された jqXHR オブジェクトが別のリクエストからリダイレクトされたかどうかを知る方法はありますか? たとえば、次のコードがあります。

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

ajax URL が 301 または 302 ステータス コードでリダイレクトされた場合、応答はリダイレクトされたページの結果になり、200 (OK) ステータス コードが返されます。これはjQueryのバグだと思います(最終的な応答が実際に成功したため、これが意図した動作であるかどうかはよくわかりません)元の応答ヘッダーを取得して、ロケーションヘッダーが存在するかどうかを確認することもできません。リダイレクトされたリクエストでのみ使用できます。

上記のコードを使用した Firebug は、XHR を介してこれら 2 つのリクエストをログに記録します

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

ただし、jQuery は 2 番目のリクエストからのデータのみを返します。

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

4

2 に答える 2

3

問題は、標準に準拠しているため、301または302がブラウザによって直接処理されることです。このステータスコードはajax呼び出しに渡されません。呼び出しが完了したことを知る唯一の方法は、completeハンドラー内にあり、さらに、completeに渡されたjqxhrオブジェクトに有用なステータスが与えられていません。SuccessハンドラーとErrorハンドラーが呼び出されることはありません。

post()メソッドが呼び出されたときにget()メソッドへのリダイレクトを使用する従来のrubyキャンプコードがあり、リソースのrubyを介して更新されたビューを表示できました。キャンプビューからJavaScriptビューに切り替えたとき、301/302はjqxhrオブジェクトに渡されませんでした。この問題を修正するには、postメソッドを書き直して200を返す必要がありました。

これは、このテーマに関するいくつかのstackoverflowの投稿です。

jQueryAjax呼び出し後にリダイレクトリクエストを管理する方法

JavaScriptで302FOUNDをキャッチ

HTTPリダイレクト:301(永続的)と302(一時的)

于 2011-08-02T22:35:18.083 に答える
0

おそらく役立つかもしれないと私が見つけたツールはwiresharkです。これは無料で、jqXHRオブジェクトで何が起こっているのかを知ることができるかもしれません。使い方はかなり簡単ですが、次の手順に従ってください。

http://www.wireshark.org/ Wiresharkは、UnixおよびWindows用のネットワークプロトコルアナライザです。私はこれまでこのツールで表面を磨いただけですが、あなたのマシンとネットワーク上の他の人との間のリクエストの分析を実行するときに便利です。

開始する前に-Wiresharkはすべてのリクエストをキャプチャするため、キャプチャする準備ができたら[開始]をクリックし、終了したら[停止]をクリックします。-IPアドレスが必要です

HTTPリクエストの分析についてもっと読む

于 2011-08-02T05:37:31.943 に答える