Отловить ajax запрос.
Всем привет.
Вопрос такой возник. Можно ли отловить ajax запрос на странице и добавить в него параметров? GET или POST. Отловить то понятно - а че дальше делать? $(document).on('ajaxSend', function(e){ console.log(e); }); Вывел в консоль, там параметров целая гора. Буду признателен за помощь. |
Цитата:
Можно в глобальных настройках jq.ajax установить в кач-ве опции beforeSend свой обработчик, в котором можно изменить параметры запроса. Однако если опция beforeSend будет установлена при вызове метода, то глобальный обработчик, вроде как, будет проигнорирован. |
Nexus,
а как можно в beforeSend изменить параметры запроса? По сути мне не обязательно глобально его устанавливать, я могу и локально втулить. Вопрос то вообще в чем - у меня есть таблица Dynatable - вот она отправляет ajax запросы для загрузки данных - при загрузке страницы, при пагинации и т.д. Так вот мне нужно при каждом таком запросе добавлять параметры в урл - каждый запрос они могут быть разные. И я не могу отслеживать все события которые инициируют ajax запрос. А евент хуков в этой таблице как кот наплакал - init, удачный запрос, апдейт и еще парочка, короче все срабатывают после загрузки данных. |
Nexus,
А нет, сорри. Я могу втулить beforeSend, но он не такой как в обычном ajax - он не передает функции параметры, но сама функция срабатывает. А в обычном запросе все норм. |
Bond,
Цитата:
Изменить тип запроса: $.ajaxSetup({ beforeSend:function(xhr,settings){ this.type='POST'; } }); $.ajax(location.href,{type:'get'}); |
Nexus,
Все таки не срабатывает так у меня. Вот такая у меня засада: var dynatable = $('#tblLeads').dynatable({ // Параметры ajax запроса - по сути такие же как в $.ajax dataset: { ajax: true, beforeSend: updateUrl, ajaxUrl: '/dynatable-operation.html', ajaxCache: null, ajaxOnLoad: true, ajaxMethod: 'GET', ajaxDataType: 'json', ajaxData: {}, records: [] }); const updateUrl = function (e, a) { $.ajaxSetup({ beforeSend: function (xhr, settings) { this.type = 'POST'; } }); } Если ваш пример запустить при загрузке страницы то - да он меняет в данном случае тип. но если поставить в функцию updateUrl, то не работает. Сама функция срабатывает, а вот параметры запроса не меняются. Смысл в то что мне при отправке запроса нужно добавлять данные которые есть в данный момент, а не те которые были при загрузке страницы |
Bond, а так?
$('#tblLeads').dynatable({ // Параметры ajax запроса - по сути такие же как в $.ajax dataset: { ajax: true, beforeSend: function(xhr, settings) { this.type = 'POST'; }, ajaxUrl: '/dynatable-operation.html', ajaxCache: null, ajaxOnLoad: true, ajaxMethod: 'GET', ajaxDataType: 'json', ajaxData: {}, records: [] }); }); |
Nexus,
Так тоже не пашет. В любом случае спасибо за подсказки. Я решил по другому - немного костыльно правда. При клике на пагинацию пока плагин таблицы думает и решает свои дела прежде чем отправить ajax, паралельно исполняется мой клик и он по шустрому пишет параметры в ajaxData ну а они свою очередь добавляются в урл как обычные GET. Конечно так делать нельзя, но сколько раз пробовал - отказа не было ни разу - всегда мой клик успевает записать параметры прежде чем плагин отправит запрос. |
Часовой пояс GMT +3, время: 22:55. |