Удалить определенных заголовков задается в jQuery.метода ajaxsetup

я настраиваю некоторые пользовательские заголовки с помощью

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

Он будет добавитьx-custom заголовок для всех запросов ajax. Но я хочу, чтобы некоторые конкретные запросы не содержали этот заголовок.

я попробовал это, удалить заголовок из ajaxSettings перед вызовом ajax и добавить его обратно, когда он будет завершен

delete $.ajaxSettings.headers["x-custom"];

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

но я чувствую, что это неправильный способ, так как запрос, который был запущен до завершения этого вызова, не получит этот заголовок. Что еще я могу сделать, пожалуйста предлагать.

должен ли я добавить заголовок обратно в следующую строку после $.ajax вместо того, чтобы делать это в обратном вызове?

2 ответов


поскольку этот вопрос не имеет ответа, который может быть отмечен как принятый. Я публикую решение.

похоже, что добавление заголовка сразу после вызова 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() метод должен быть прикреплен к документу.