xhrオブジェクトでgetAllResponseHeadersを使用すると、ajax呼び出し後にすべての応答ヘッダーを取得できます。しかし、Requestヘッダー文字列を取得する方法が見つかりません。それは可能ですか?
2 に答える
これがデバッグ目的の場合は、Firebug または Chrome 開発者ツール (および IE で呼び出される機能) を使用して、ブラウザーからサーバーへのネットワーク トラフィックを調べることができます。
別の方法は、次のスクリプトのようなものを使用することです。
$.ajax({
url: 'someurl',
headers:{'foo':'bar'},
complete: function() {
alert(this.headers.foo);
}
});
ただし、既に定義されているヘッダーのみが利用可能だと思いheaders
ます(ヘッダーが変更された場合(たとえば beforeSend で)どうなるかわかりません)。
jQuery ajax の詳細については、http://api.jquery.com/jQuery.ajax/ を参照してください。
編集: XMLHttpRequest の setRequestHeader へのすべての呼び出しでヘッダーをキャッチしたい場合は、そのメソッドをラップするだけです。これはちょっとしたハックです。もちろん、リクエストが発生する前に、以下のコードをラップする関数が実行されるようにする必要があります。
// Reasign the existing setRequestHeader function to
// something else on the XMLHtttpRequest class
XMLHttpRequest.prototype.wrappedSetRequestHeader =
XMLHttpRequest.prototype.setRequestHeader;
// Override the existing setRequestHeader function so that it stores the headers
XMLHttpRequest.prototype.setRequestHeader = function(header, value) {
// Call the wrappedSetRequestHeader function first
// so we get exceptions if we are in an erronous state etc.
this.wrappedSetRequestHeader(header, value);
// Create a headers map if it does not exist
if(!this.headers) {
this.headers = {};
}
// Create a list for the header that if it does not exist
if(!this.headers[header]) {
this.headers[header] = [];
}
// Add the value to the header
this.headers[header].push(value);
}
インスタンスにヘッダーが設定されたら、次のXMLHttpRequest
ように調べることでヘッダーを取得できますxhr.headers
。
var xhr = new XMLHttpRequest();
xhr.open('get', 'demo.cgi');
xhr.setRequestHeader('foo','bar');
alert(xhr.headers['foo'][0]); // gives an alert with 'bar'
Sinon の FakeXMLHttpRequest を使用して、ブラウザの XHR を置き換えることができます。テスト用の使用方法についてはこのドキュメントに記載されていますが、デバッグ目的でモジュールを使用できると確信しています。
あなたがする必要があるのは:
var requests;
this.xhr = sinon.useFakeXMLHttpRequest();
this.xhr.onCreate = function(xhr) {
requests.push(xhr);
}
その後、次の方法requests
でヘッダーの配列を確認できます。
console.log(requests[0].requestHeaders);
リクエスト ヘッダーにアクセスするため。