jQuery - могу ли я "добавить" дополнительный параметр к каждому выполненному запросу get / post - PullRequest
2 голосов
/ 06 сентября 2010

Я хотел бы расширить jQuery так, чтобы каждый запрос post / get, сделанный на стороне клиента, имел дополнительный отправленный параметр (всегда один и тот же ключ: значение). Мне нужно это, чтобы определить на стороне клиента, был ли сделан запрос через jQuery, так как у меня есть несколько js-библиотек на работе. Дополнительный параметр просто jquery : true. Типичный запрос обычно будет выглядеть так:

jQuery.post('/users/save', { name : 'john', age : 24 }, ....)

Есть ли способ добавить этот параметр дополнения, расширив jQuery или каким-либо другим способом, который будет выглядеть так, когда он достигнет сервера:

{ name : 'john', age : 24, jquery : true }

По сути, я хочу перехватить запрос и отредактировать его параметры, прежде чем они достигнут серверной стороны. спасибо.

Ответы [ 2 ]

1 голос
/ 06 сентября 2010

Попробуйте вставить следующее где-нибудь в своем коде перед выполнением любого запроса AJAX:

$.ajaxSetup({
    beforeSend: function(xhr) {
        var newUrl = this.url;
        if (newUrl.indexOf("?") != -1) {
            newUrl = newUrl + '&jquery=true';
        } else {
            newUrl = newUrl + '?jquery=true';                
        }
        xhr.open(this.type, newUrl, this.async);
    }
});

Это вызовет функцию перед отправкой любого запроса AJAX. Функция определяет, каким должен быть новый URL-адрес (на основе того, была ли уже присоединена какая-либо строка запроса), затем повторно открывает запрос XMLHttpRequest с присоединенным в конце jquery = true.

Вот рабочая демонстрация этого: http://jsfiddle.net/uz9zg/

1 голос
/ 06 сентября 2010

Посмотрите на перед отправкой (XMLHttpRequest)

Предварительный обратный вызов для изменения Объект XMLHttpRequest до его послал. Используйте это, чтобы установить пользовательские заголовки и т.д. XMLHttpRequest передается как единственный аргумент. Это Аякс Событие. Вы можете вернуть ложь в функция отмены запроса

Вы должны иметь возможность использовать его с ajaxSetup

...