如何在xhr对象上设置getAllResponseHeaders()

时间:2013-12-31 13:33:14

标签: javascript http-headers xmlhttprequest

我正在使用此代码记录xhr请求:

(function(open) {
  XMLHttpRequest.prototype.open = function(method, url, async) {

if (..something..) 
{

...
open.call(this, method, url, async);
...

}

  };

})(XMLHttpRequest.prototype.open);

所以现在我想获得响应标题,例如console.log(getAllResponseHeaders()) 我尝试在代码中的任何地方实现它,但我没有得到任何东西,这意味着什么都没有记录。我在哪里或如何获得响应标题?

1 个答案:

答案 0 :(得分:1)

请记住,标题只有在它们到达时才存在,而不是之前存在。这意味着您必须使用事件侦听器来捕获它们。按国家4他们肯定存在。

(function(open, headers) {
    var headhandle = function () {
        if (this.readyState === 4) console.log(headers.call(this));
    };
    XMLHttpRequest.prototype.open = function(method, url, async) {
        this.addEventListener('readystatechange', headhandle);
        open.call(this, method, url, async);
    };
}(XMLHttpRequest.prototype.open, XMLHttpRequest.prototype.getAllResponseHeaders));

var x = new XMLHttpRequest();
x.open();
x.send();
/*
Date: Tue, 31 Dec 2013 13:43:42 GMT
Content-Encoding: gzip
Vary: *
Last-Modified: Tue, 31 Dec 2013 13:43:43 GMT
X-Frame-Options: SAMEORIGIN
Content-Type: text/html; charset=utf-8
Cache-Control: public, max-age=60
Content-Length: 14317
Expires: Tue, 31 Dec 2013 13:44:43 GMT
*/

使用readyState === 3进行测试但未提供结果,因此您肯定需要等待4