2012-05-14 20 views
0

私はAjaxリクエストを作成しようとしており、レスポンスヘッダーを解析して「Location」属性を取得しようとしています。これは私のコードです:「Ajaxリクエストですが内容はありません

var request = new XMLHttpRequest(); 
request.onreadystatechange = function() { 
    if(request.readyState == 4 && request.status == 301) { 
     alert('test'); 
     var header = request.getResponseHeader('Location'); 
     console.log(header); 
    } 
} 
request.open('GET', hrefAttr, true); 
request.send(null); 

問題は、何らかの理由で、リクエストが送信し、応答があまりにも受信する(Firebugの中に赤い「GET」要求+応答)であるということですが、私はいずれかを得ることはありませんテスト "アラートやFirebugコンソールのテキストは表示されません。

EDIT:これは、修正されたコードである:

var request = new XMLHttpRequest(); 
request.onreadystatechange = function() { 
console.log(request.readyState); 
    if(request.readyState <= 3 && request.status == 301) { 
     alert('test'); 
     var header = request.getResponseHeader('Location'); 
     console.log(header); 
    } 
    else if (request.readyState == 0 && request.status == 301) { 
     alert('state0'); 
    } 
} 
request.open('GET', hrefAttr, true); 
request.send(); 

にconsole.log(request.readyState)状態のこのシーケンスを与える:1、1、2、4

FirebugのコンソールタブでHttp Request + Responseは正常に表示されますが、赤で表示されます(何かを意味する場合)。

なぜ私はそれが働いていないのか分かりません... 編集:私はFirefoxを使用しています。

ありがとうございます!

+0

応答コードは301ですか? – Gary

+0

はい、ヘッダーに「HTTP/1.1 301 Moved」と表示されます。 –

+0

レディステートはどうですか、それは偶然0ですか? – Gary

答えて

2

残念ながら、XHRは301に続き、リダイレクトされたページのコンテンツを返します。あなたは、XMLHttpRequestの原点と要求URLの起源は同一生成元要求イベントのルールを観察しながら、同じ起源は、透過的にリダイレクトに従っている場合はW3C here.

で文書化の挙動を見ることができます。

基本的に、あなたのリクエストは透過的に301に従っています。ブラウザは自動的にリダイレクトされ、実行することはできません。 Webサーバーを制御できる場合、これは変更できます(ほとんどのアドバイスとは異なります)。

希望すると便利です。

+0

これは実際には奇妙なことです。私がリクエストを送るとき、私はリダイレクトされません、私は良い "301"ステータスとファイヤーバックのヘッダーは私に "場所:XYZ"情報を示す応答を取得します。編集:私はチェックし、HTTPヘッダーにはHTMLがありません。 –

関連する問題