我已将XMLHttpRequest
原型化,以添加其他功能
但是,当我尝试向调用添加自定义标头时,它不起作用(在chrome开发人员工具栏中没有错误和调用)
我的代码:
(function(){
var originalOpenFunction = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function (method, url, async, user, pass) {
//Add custom header
this.setRequestHeader('custom-header', 'value');
originalOpenFunction.call(this, method, url, async, user, pass);
};
})();
$.ajax("http://www.jsfiddle.net");
当我删除setRequestHeader
行时,我得到了我预期的错误(不允许跨源)。
注意虽然我使用jquery来测试javascript,但解决方法应该是原生javascript。
答案 0 :(得分:1)
通过以下方式公开错误:
$.ajax("http://www.jsfiddle.net").fail(function (e) {
console.log(e);
});
你会得到:
InvalidStateError:无法在'XMLHttpRequest'上执行'setRequestHeader':对象的状态必须是OPENED。
这意味着您需要在致电open()
之前致电setRequestHeader()
。
然后您将遇到跨域问题。确保您没有尝试向不受支持的域执行跨域请求。 shell从http://fiddle.jshell.net
运行。
请求域正常工作(返回HTML)。