質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

3回答

17526閲覧

jQueryのAjaxでリダイレクト先URLを取得したい

Asmape

総合スコア47

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2016/03/23 07:35

jQueryの$.ajaxを利用して、リダイレクトさせるようなページにアクセスしているのですが、リダイレクト先のURLを取得する方法はありますか?XMLHttpRequestだとresponseURLというのがあるようですが、$.ajaxのcompleteの第一引数には見当たらないので…。わかる方教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
Lhankor_Mhy

総合スコア36115

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Asmape

2016/03/23 23:14

リダイレクト自体を$.ajaxが勝手に処理してしまうようで、301とか302のときにcomplete等々は実行されないようなんですが…
Asmape

2016/03/24 11:18

出来ました!!ありがとうございます!!!
Lhankor_Mhy

2016/03/24 11:36

ブラウザ互換以外のものも破壊しているかもしれません。ご使用は慎重に願います。
guest

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.hreflocation.replace() でもリダイレクト可能です。
JavaScriptコードは様々なので固定的な方法ではリダイレクト先を得られません。
サイト毎のコードの特徴を見極めて正規表現で頑張って下さい。

サーバサイドスクリプトで実装する

実際のところはJavaScriptで参照しやすいようにサーバサイドスクリプトでリダイレクト先を予めJavaScriptコードに埋め込むなり、APIを用意するのが妥当だと思います。
リダイレクタが余所様のサイトである場合はいろいろと問題がありそうなので目的が分かるまでは明言は控えます。

Re: Asmape さん

投稿2016/03/23 09:33

think49

総合スコア18164

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Asmape

2016/03/23 23:16

リダイレクト自体はできるのですが、リダイレクト先のURLを取得したいのです。一番上のやつをcompleteに突っ込んでみたのですが、できませんでした。302の時にはcompleteを実行しないようです。
Asmape

2016/03/24 04:06

いや、まず302のときにcompleteなりsuccessなりに処理が回ってこないので…
think49

2016/03/24 10:16

ですので、completeではなく、statusCodeで取れませんか?
Asmape

2016/03/24 10:52

…?completeに指定するfunctionの引数のxhrのstatusCode()ではないのですか?
Lhankor_Mhy

2016/03/24 10:53

think49 さん、仕様を読むと明記されてる感じではないんですが、XMLHttpRequest自体でリダイレクトを処理してるようですね。301の応答をクライアントに返すわけではないみたい。 https://xhr.spec.whatwg.org/#states の状態の説明に、All redirects (if any) have been followed and all HTTP headers of the response have been received. とあります。
think49

2016/03/24 13:23 編集

To: Asmape さん > …?completeに指定するfunctionの引数のxhrのstatusCode()ではないのですか? 意図したコードは下記です。詳しくは今朝掲示した「jQuery API Documentation」をお読み下さい。 jQuery.ajax({statusCode:{302: function () {}}}); To: Lhankor_Mhy さん 未検証ですが、HEADメソッドでもリダイレクトされてしまうのか、興味があります。 ちょっと時間が無いので今日は試せませんが…。
guest

0

普通にリダイレクトしませんか?
もしかしてサーバが302を返さないとか・・・。

ちなみに1.4から

success: function(data, status, xhr) ~

みたいな書き方で、xhrでステータスチェックできますね。

if ( xhr.status === 302 ) { ~

投稿2016/03/23 07:54

ogaaaan

総合スコア765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ogaaaan

2016/03/23 07:55

あーごめんなさい、質問勘違いして答えてしまいました。 スルーしてください。 ぺこり。
Asmape

2016/03/23 07:56

あ、はいw
ogaaaan

2016/03/23 08:33

あざっすー! 今後気をつけます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問