鉴于XMLHttpRequest,我如何发现其请求方法?这对于回调获取原始调用的上下文非常有用。
xhr = new XMLHttpRequest()
xhr.open('post', 'http://example.com', true)
xhr.??? // should return 'post'
答案 0 :(得分:2)
遗憾的是,没有标准属性可以告诉您请求的类型。 this post | MDN reference
有几种选择建议自己:
给自己一个包装
自行包装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
};
})();
我不推荐那个。 :-)包装器更灵活,更可靠的跨浏览器。