Javascript 我可以为所有AJAX请求设置全局标头吗?
这似乎不起作用:Javascript 我可以为所有AJAX请求设置全局标头吗?,javascript,jquery,ajax,header,Javascript,Jquery,Ajax,Header,这似乎不起作用: $.ajaxSetup({ headers: { Accept: 'application/vvv.website+json;version=1 ', Authorization: 'Token token=\"FuHCLyY46\"' } }); 我原以为会的。如果我将这些过滤器专门添加到AJAX调用中,那么它们就可以工作了。我希望对所有AJAX调用进行全局性测试。我做了一些额外的测试,您发布的代码工作得非常好。如果在如何设置参数方面遇到问题,您可以
$.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\"");
}
});
beforeSend
答案与直接向ajax调用添加header
不建立相同的header
。因此,为了使jQuery能够正确地执行此操作,我添加了以下内容:
headers: myGlobalHeaders
其中
myGlobalHeaders
是一个全局变量。不幸的是,我不得不在每一个ajax调用上都写下这一行。可怕的!也许我会编辑jQuery框架来处理这个问题。也可以用框架无关的方式,通过对open方法进行monkey补丁来实现这一点:
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的第三方代码
(注意:注意标题)您还可以扩展ajax jquery函数,设置您想要的标题,并始终调用扩展函数您使用的是哪个版本的jquery?headers是在1.5中添加的,您可以在如何在ajax调用中设置headers中添加更多的代码吗?您希望JSON中有一个“headers”对象吗?也许我们混淆了HTTP头和您需要的一些内部头对象。这对我来说完全有编程意义。老实说,这是我认为有效的方法。但事实并非如此,但如果我只是手动将其添加到ajax请求的头文件{}中,就会发生这种情况。例如,如果我在ajax调用中将
beforeSend
作为一个函数,它将不起作用。仅当我使用标题时,它才有效。我还检查了POST请求中的标题,并且您的答案不会在其中发布这些标题,如果我在调用本身中设置此beforeSend,它也不会这样做。也许是因为xhr请求头和jQueryAjax头不同?啊,好吧,我想出来了。这完全是我的错。我使用的是angularJS,我没有意识到该框架篡夺了整个ajax调用过程。谢谢你的帮助,约翰!使用$.ajaxSetup的缺点是,它将被所有请求调用(例如,如果您使用的是另一个也使用$.ajax的库)。这可能不是所有跨域请求都需要的。“不幸的是,我必须在每次ajax调用中都写下这一行。”-不,您可以使用$.ajaxSetup()
在我的web应用程序中,当同一ajax调用多次触发时,此标题的值应用多次,并使用逗号分隔值,有什么方法可以删除特定的标题?