如何查询XMLHttpRequest的方法类型?

How to query XMLHttpRequest's method type?

给定一个 XMLHttpRequest,我如何发现它的请求方法?这对于回调获取有关原始调用的上下文很有用。

xhr = new XMLHttpRequest()
xhr.open('post', 'http://example.com', true)
xhr.??? // should return 'post'

不幸的是,没有标准 属性 可以告诉您请求的类型。 MDN reference | spec reference


有两个选项:

  1. 给自己一个包装纸

  2. 包装 XMLHttpRequest 本身并添加扩展 属性,但 test test test 在目标浏览器上。

#1 示例:

function xhr(method, url, done) {
    var x = {
        method: method,
        xhr: new HTMLHttpRequest()
    };
    x.method = method;
    x.xhr.onreadystatechange = function() {
        if (x.xhr.readyState == 4) {
            done(x, x.xhr.status == 200 ? x.xhr.responseText : null);
        }
    };
    x.xhr.open(method, url);
    return x;
}

(或者做一个 returns 承诺的版本。)

#2 示例(但 测试测试测试):

(function() {
    var real = XMLHttpRequest;

    XMLHttpRequest = function() {
        var rv = new real();
        rv.open = function(method) {
            rv.method = method;
            return rv.apply(this, arguments);
        };
        return rv; // Overrides the standard result of new XMLHttpRequest
    };
})();

我不推荐这样做。 :-) 包装器更加灵活和可靠的跨浏览器。