jQueryの$.ajaxを利用して、リダイレクトさせるようなページにアクセスしているのですが、リダイレクト先のURLを取得する方法はありますか?XMLHttpRequestだとresponseURLというのがあるようですが、$.ajaxのcompleteの第一引数には見当たらないので…。わかる方教えてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
ベストアンサー
It seems like this is only exposing responseURL on the platforms where it is supported, but not attempting to do any cross-browser normalization. If that is the case, I would prefer not to add it because it would be another difference that would need to be documented in the already-complicated $.ajax API docs.
What exactly is being returned as responseURL? I couldn't tell from the spec. Is it the Location: header?
Fix #15173: Support responseURL
attribute for jqXHR by xKerman · Pull Request #1615 · jquery/jquery · GitHub
ということらしいです。英語苦手なんですが、「IEがそのプロパティに対応していないのでブラウザ互換のため対応しない方がいいのでは」「Locationヘッダを使えばいいのでは」ということですかね。
#####追記
コメントを受けて追記します。
javascript
1var xhr 2$.ajax('http://example.com',{ 3 complete:function(){console.log(xhr.responseURL)}, 4 xhr:function(){return xhr = new window.XMLHttpRequest();} 5});
このようなやり方で、XMLHttpRequest
オブジェクトが取得できました。
なお、これはブラウザ互換を破壊してると思いますのでそのあたりはご確認ください。
投稿2016/03/23 08:22
編集2016/03/24 04:55総合スコア37411
0
リダイレクトはいくつか方法があると思うのですが、どのリダイレクトでしょうか。
HTTPリダイレクト
HTTP 301
もしくは HTTP 302
の時に Location
ヘッダで得られます。
レスポンスヘッダを参照するだけなら HEAD
メソッドで十分ですね。
JavaScript
1if (xhr.status === 301 || xhr.status === 302) { 2 console.log(xhr.getResponseHeader('Location')); // リダイレクト先 3}
HTMLのmeta要素
HTMLのmeta要素でもリダイレクト可能です。該当meta要素ノードのcontent属性値からリダイレクト先を参照します。
html
1<meta http-equiv="refresh" content="0;URL=http://example.com/">
JavaScriptのlocation
JavaScriptの location.href
や location.replace()
でもリダイレクト可能です。
JavaScriptコードは様々なので固定的な方法ではリダイレクト先を得られません。
サイト毎のコードの特徴を見極めて正規表現で頑張って下さい。
サーバサイドスクリプトで実装する
実際のところはJavaScriptで参照しやすいようにサーバサイドスクリプトでリダイレクト先を予めJavaScriptコードに埋め込むなり、APIを用意するのが妥当だと思います。
リダイレクタが余所様のサイトである場合はいろいろと問題がありそうなので目的が分かるまでは明言は控えます。
Re: Asmape さん
投稿2016/03/23 09:33
総合スコア18194
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/24 10:53

0
普通にリダイレクトしませんか?
もしかしてサーバが302を返さないとか・・・。
ちなみに1.4から
success: function(data, status, xhr) ~
みたいな書き方で、xhrでステータスチェックできますね。
if ( xhr.status === 302 ) { ~
投稿2016/03/23 07:54
総合スコア767
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/23 23:14
2016/03/24 04:55
2016/03/24 11:18
2016/03/24 11:36