XhrオブジェクトでgetAllResponseHeadersを使用すると、ajax呼び出し後にすべての応答ヘッダーを取得できます。しかし、Requestヘッダー文字列を取得する方法が見つかりません、それは可能ですか?
これがデバッグ目的の場合、FirebugまたはChrome Developer Tools(およびIEで呼び出される機能)を使用して、ブラウザーからサーバーへのネットワークトラフィックを調べることができます。
別の方法は、このスクリプトのようなものを使用することです。
$.ajax({
url: 'someurl',
headers:{'foo':'bar'},
complete: function() {
alert(this.headers.foo);
}
});
ただし、headers
で既に定義されているヘッダーのみが利用可能だと思います(ヘッダーが変更された場合にどうなるかはわかりません(たとえばbeforeSendで))。
JQuery ajaxについてもう少し読むことができます: http://api.jquery.com/jQuery.ajax/
EDIT: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);
リクエストヘッダーにアクセスします。