0

我已经制作了原型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。

提琴手

4

1 回答 1

1

通过以下方式暴露错误:

$.ajax("http://www.jsfiddle.net").fail(function (e) {
  console.log(e);
});

你会得到:

InvalidStateError:无法在“XMLHttpRequest”上执行“setRequestHeader”:对象的状态必须是 OPENED。

这意味着您需要在调用open()之前先调用setRequestHeader()

然后你会遇到跨域问题。确保您没有尝试向不受支持的域发出跨域请求。外壳从http://fiddle.jshell.net.

请求该域有效(返回 HTML)。

见:http: //jsfiddle.net/HfAZN/3/

于 2014-01-17T12:44:00.717 回答