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

这似乎不起作用:

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

我原以为会。 如果我将这些filter专门添加到我的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 header 。 所以为了让jQuery正确地执行此操作,我添加以下内容:

 headers: myGlobalHeaders 

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