Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我可以为所有AJAX请求设置全局标头吗?_Javascript_Jquery_Ajax_Header - Fatal编程技术网

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调用多次触发时,此标题的值应用多次,并使用逗号分隔值,有什么方法可以删除特定的标题?