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

Remove specific request headers set in jQuery.ajaxSetup

本文关键字:请求 设置 jQuery ajaxSetup 删除      更新时间:2023-09-26

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

$.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((方法应仅附加到文档