如何查询XMLHttpRequest的方法类型?

时间:2015-11-24 12:50:53

标签: javascript http networking xmlhttprequest

鉴于XMLHttpRequest,我如何发现其请求方法?这对于回调获取原始调用的上下文非常有用。

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

1 个答案:

答案 0 :(得分:2)

遗憾的是,没有标准属性可以告诉您请求的类型。 this post | MDN reference

有几种选择建议自己:

  1. 给自己一个包装

  2. 自行包装XMLHttpRequest并在目标浏览器上添加expando属性,但 test test test

  3. #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;
    }
    

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

    #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
        };
    })();
    

    我不推荐那个。 :-)包装器更灵活,更可靠的跨浏览器。