2016-11-01 17 views
-1

コンテンツタイプとしてJSONPとエラーハンドラ内のリダイレクトフローの最後のURLを取得する方法:は、AJAXは:私は、次のJavaScript/jQueryのコードでウェブサイトを持っている

var req = $.ajax({ 
    type: 'GET', 
    dataType: 'jsonp', 
    url: 'http://foo.com', 

    error: function (jqXHR, textStatus, errorThrown) { 
     // what is the last URL in the redirect flow? 
    } 
}); 

これは何が起こるかです:

いいえを行い302を返し、 http://bar.comが要求される http://bar.com

工程2)にリダイレクト

ステップ1) http://foo.comが要求され、有効なJSONPのコンテンツ(HTMLファイル)が含まれているため、req.error()が正常にトリガーされます。

を達成しようとすると、手順2のURL(http://bar.com)が表示されます。このURLは動的です(リクエストごとに変更されます)。また、私はこの要求をサーバー側で行うことはできません(簡単に行うことができますが、手順2でそのWebサイトを開始したクライアントでなければなりません)。

Chromeデベロッパーツールの[ネットワーク]タブでリダイレクトが行われていることがわかります(実際には3つのステップフローですが、簡単にするため、上記の2つのステップフローを想像してください)。 enter image description here

注 - リモートサーバーでCORSが許可されていないため、JSONPを使用しています。

+0

...有効CORSを持っている必要があります。あなたのエラーハンドラのgetResponseHeader( 'Location') '? – mherzig

+0

@mherzig私は 'null'を取得します。 –

+0

ダン。意味があります、私はあなたがヘッダーが読み取れるようにサーバーを設定する必要がありますと信じています。 – mherzig

答えて

0

サービスワーカーは、jsonpを使用しているため、これを検出するためにのみ使用できます。 しかし、それはまた...あなたや他のサイトがhttpsで実行する必要がある

オリジナルの答えを意味

であれば(することができ、私はXHRは、これを行うことができるとは思わないが、私は新しいフェッチAPIを推測私は間違っていない)モードのコアを使用して動作しません。最終的にURLがうーん...私は、現時点ではこれを確認する時間がありませんが、あなたはjqXHR `を見れば、あなたが何を参照ください

fetch('https://httpbin.org//redirect/1').then(res => console.log(res.url))

+0

私は本当にJSONPなんて気にしません。リダイレクション・フローの最後のURLを知ることだけです。 –

+0

私はCORS: 'fetch( 'http://example.com'、{'mode': 'no-cors'})に不平を言っていたので、コードを少し変更しました。(res => console.log(res。 URL)) '。この固定されたCORSの問題は、Chromeの開発ツールの[ネットワーク]タブでも同様ですが、コンソールに表示されるredirフローは表示されません。 (私はあなたの答えをdownvoteしなかったbtw) –

+0

私のサイトはHTTPSで実行する必要があります、あなたはどういう意味ですか? HTTPSサイトとHTTPSサイトの両方でこのコードを実行しようとしましたが、何も変更はありません。 –

関連する問題