如何查询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
有两个选项:
给自己一个包装纸
包装 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
};
})();
我不推荐这样做。 :-) 包装器更加灵活和可靠的跨浏览器。
给定一个 XMLHttpRequest,我如何发现它的请求方法?这对于回调获取有关原始调用的上下文很有用。
xhr = new XMLHttpRequest()
xhr.open('post', 'http://example.com', true)
xhr.??? // should return 'post'
不幸的是,没有标准 属性 可以告诉您请求的类型。 MDN reference | spec reference
有两个选项:
给自己一个包装纸
包装
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
};
})();
我不推荐这样做。 :-) 包装器更加灵活和可靠的跨浏览器。