从原型中添加自定义标头

时间:2014-01-17 12:30:16

标签: javascript xmlhttprequest request-headers

我已将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。

JsFiddle

1 个答案:

答案 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)。

请参阅:http://jsfiddle.net/HfAZN/3/