【问题标题】:How to query XMLHttpRequest's method type?如何查询 XMLHttpRequest 的方法类型?
【发布时间】:2015-11-24 21:04:46
【问题描述】:

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

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

【问题讨论】:

    标签: javascript http networking xmlhttprequest


    【解决方案1】:

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


    几个选项建议自己:

    1. 给自己一个包装

    2. 包装XMLHttpRequest 本身并添加一个expando 属性,但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;
    }
    

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

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

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

    【讨论】:

    • 这就是我发现的,这在 XHR 2 时代对我来说是非常令人惊讶的。不过,我会看看是否有人有一个狡猾的 hack。
    • @mahemoff:我也很惊讶。顺便说一句,我已经为你添加了几个选项。
    • 在我的例子中,我使用的是 jQuery Rails 链接,所以我最终只查看了触发它的链接。很蹩脚:) 像$(ev.target).data.method=='post'
    猜你喜欢
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    相关资源
    最近更新 更多