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

Can I set a global header for all AJAX requests?

本文关键字:全局 设置 请求 AJAX 我可以      更新时间:2023-09-26

这似乎不起作用:

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

我本以为会这样。如果我将这些过滤器专门添加到我的 AJAX 调用中,那么它们确实有效。我想对所有 AJAX 调用全局执行此操作。

我做了一些额外的测试,你发布的代码工作得很好。 如果您在如何设置参数方面遇到问题,您可以随时进行 beforeSend 调用并自己修改 xml 请求。

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

也可以通过猴子修补 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;
}

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

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

beforeSend答案与将header直接添加到 ajax 调用中并不建立相同的header。因此,为了使jQuery正确地执行此操作,我添加了以下内容:

headers: myGlobalHeaders

其中myGlobalHeaders是全局变量。不幸的是,我必须在每次 ajax 调用时编写此额外行。可怕!也许我会编辑jQuery框架来处理这个问题。