删除jQuery.ajaxSetup中设置的特定请求标头

我使用设置一些自定义标头

$.ajaxSetup({ headers : { 'x-custom' : 'value' } }); 

它将为所有ajax请求添加x-custom标头。 但我想要一些不包含此标头的特定请求。

我试过这个,在ajax调用之前删除ajaxSettings中的头文件,并在完成后将其添加回来

 delete $.ajaxSettings.headers["x-custom"]; $.ajax({ ... "success": function (data) { $.ajaxSettings.headers["x-custom"] = 'value'; ... } }); 

但我觉得这不是正确的方法,因为在完成该调用之前触发的请求将不会获得该标头。 我还能做些什么呢?

我应该在$.ajax后面的下一行中添加标题,而不是在回调中执行吗?

由于这个问题没有任何可以标记为已接受的答案。 我发布了解决方案。

看起来像在AJAX调用之后立即添加回头是有意义的。 这样我们就不会等待成功回调然后添加它。

 delete $.ajaxSettings.headers["x-custom"]; // Remove header before call $.ajax({ ... "success": function (data) { ... } }); $.ajaxSettings.headers["x-custom"] = 'value'; // Add it back immediately 

您可以添加ajaxComplete函数。 它将在你所有的ajax请求之后运行,并按照你的意愿行事。
像这样的东西,

 $(document).ajaxComplete(function(event, xhr, settings) { // Add the headers again. $.ajaxSetup({ headers : { "x-custom" : "value" } }); } }); 

你可以在这里找到文档。
此外,从jQuery 1.8开始,.ajaxComplete()方法只应附加到文档