我可以为所有AJAX请求设置全局标头吗?

Tri*_*rip 25 javascript ajax jquery header

这似乎不起作用:

$.ajaxSetup({
  headers: {
    Accept: 'application/vvv.website+json;version=1 ',
    Authorization: 'Token token=\"FuHCLyY46\"'
  }
});
Run Code Online (Sandbox Code Playgroud)

我本以为会这样.如果我将这些过滤器专门添加到我的AJAX调用中,那么它们就能正常工作 我想为所有AJAX调用全局执行此操作.

Joh*_*ner 51

我做了一些额外的测试,你发布的代码完美无缺.如果您在参数设置方面遇到问题,您可以随时进行beforeSend调用并自行修改xml请求.

$.ajaxSetup({
    beforeSend: function (xhr)
    {
       xhr.setRequestHeader("Accept","application/vvv.website+json;version=1");
       xhr.setRequestHeader("Authorization","Token token=\"FuHCLyY46\"");        
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 使用$ .ajaxSetup的缺点是它将被调用所有请求(例如,如果你使用的是另一个也使用$ .ajax的库).对于所有跨域请求,这可能不是所希望的. (2认同)

Dan*_*iel 16

也可以通过猴子修补open方法以框架无关的方式执行此操作:

var o = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function(){
  var res = o.apply(this, arguments);
  var err = new Error();
  this.setRequestHeader('X-Ajax-Stack', JSON.stringify(err.stack));
  return res;
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我通过头发送堆栈跟踪信息,这允许后端知道Ajax请求的来源,即使它来自不使用jQuery的第三方代码.

(注意:小心标题 变得太大)