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

时间:2014-04-30 09:01:27

标签: javascript jquery ajax http-headers

我使用

设置了一些自定义标题
$.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之后的下一行添加标题,而不是在回调中添加吗?

2 个答案:

答案 0 :(得分:16)

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

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

delete $.ajaxSettings.headers["x-custom"]; // Remove header before call

$.ajax({
    ...
    "success": function (data) {
        ...
    }
});

$.ajaxSettings.headers["x-custom"] = 'value'; // Add it back immediately

答案 1 :(得分:0)

您可以添加ajaxComplete函数。它将在你所有的ajax请求之后运行,并做任何你想做的事 像这样的东西,

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

您可以找到文档here 此外,从jQuery 1.8开始,.ajaxComplete()方法只应附加到文档