【问题标题】:Add custom header from within a prototype从原型中添加自定义标题
【发布时间】:2014-01-17 12:30:16
【问题描述】:

我已经对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

【问题讨论】:

    标签: javascript xmlhttprequest request-headers


    【解决方案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/

    【讨论】:

      猜你喜欢
      • 2016-10-17
      • 1970-01-01
      • 2012-03-20
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 2017-10-29
      • 2021-09-10
      相关资源
      最近更新 更多