Отловить 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, время: 05:47. |