jQuery's ajaxSetup - Я хотел бы добавить данные по умолчанию только для запросов GET

На сайте, управляемом ajax, я добавил некоторые данные по умолчанию, используя ajaxSetup, а также это:

var revision = '159';
$.ajaxSetup({
    dataType: "text json",
    contentType: "application/x-www-form-urlencoded; charset=UTF-8",
    data: {
        r: revision
    }
});

Это необходимо для того, чтобы гарантировать отсутствие кеширования при развертывании новой ревизии и запросе клиентом html-шаблонов или json-данных из серверной части. По этой причине серверная часть и интерфейсная программа имеют одинаковый номер версии.

Проблема в том, что что серверная часть несколько недовольна получением параметра 'r', когда интерфейс выполняет PUT, POST или DELETE. Нет возможности указать jQuery ajax, что эти данные должны использоваться только при выполнении запросов GET, а не при выполнении POST, PUT или запросы DELETE.

ОБНОВЛЕНИЕ:

Сначала я попробовал функцию beforeSend, так как знал об этом. Однако изменение settings.data было возможно, но любые изменения, казалось, исчезали, когда возвращался beforeSend. Возможно, это была моя вина .. .: -)

Вместо этого я остановился на ajaxPreFilter. Хотя это было непросто. Options.data - это не объект, а результат $ .param (объект), поэтому первая проблема заключалась в том, чтобы его не параметризовать. В итоге я получил следующее:

var revision = '159';
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
    // do not send data for POST/PUT/DELETE
    if (originalOptions.type !== 'GET' || options.type !== 'GET') {
        return;
    }

    var data = originalOptions.data;
    if (originalOptions.data !== undefined) {
        if (Object.prototype.toString.call(originalOptions.data) === '[object String]') {
            data = $.deparam(originalOptions.data); // see http://benalman.com/code/projects/jquery-bbq/examples/deparam/
        }
    } else {
        data = {};
    }

    options.data = $.param($.extend(data, { r: revision }));
});
22
задан Sumurai8 26 June 2015 в 17:08
поделиться