0

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

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 コンソールに「テスト」アラートもテキストも表示されません。

編集:これは変更されたコードです:

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を使用しています。

前もって感謝します !

4

1 に答える 1

2

残念ながら、XHRは301に従い、リダイレクトされたページのコンテンツを返します。ここで、W3Cで文書化された動作を確認できます。

XMLHttpRequestのオリジンとリクエストURLのオリジンが同じオリジンである場合、同じオリジンのリクエストイベントルールを遵守しながら、リダイレクトを透過的に追跡します。

つまり、基本的に、リクエストは301を透過的にフォローしています。ブラウザは自動的にリダイレクトされ、意図したことを実行できなくなります。Webサーバーを制御できる場合は、これを変更できます(ただし、ほとんどのアドバイスに反します)。

お役に立てれば!

于 2012-05-14T01:24:17.887 に答える