Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.08.2018, 13:27
Профессор
Отправить личное сообщение для Bond Посмотреть профиль Найти все сообщения от Bond
 
Регистрация: 16.06.2013
Сообщений: 172

Отловить ajax запрос.
Всем привет.
Вопрос такой возник.
Можно ли отловить ajax запрос на странице и добавить в него параметров? GET или POST.
Отловить то понятно - а че дальше делать?
$(document).on('ajaxSend', function(e){
   console.log(e);
});

Вывел в консоль, там параметров целая гора.
Буду признателен за помощь.
Ответить с цитированием
  #2 (permalink)  
Старый 02.08.2018, 14:06
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,794

Сообщение от Bond
Можно ли отловить ajax запрос на странице и добавить в него параметров? GET или POST.
Слушая event на document - вряд ли.
Можно в глобальных настройках jq.ajax установить в кач-ве опции beforeSend свой обработчик, в котором можно изменить параметры запроса.
Однако если опция beforeSend будет установлена при вызове метода, то глобальный обработчик, вроде как, будет проигнорирован.
Ответить с цитированием
  #3 (permalink)  
Старый 02.08.2018, 14:23
Профессор
Отправить личное сообщение для Bond Посмотреть профиль Найти все сообщения от Bond
 
Регистрация: 16.06.2013
Сообщений: 172

Nexus,
а как можно в beforeSend изменить параметры запроса?
По сути мне не обязательно глобально его устанавливать, я могу и локально втулить.
Вопрос то вообще в чем - у меня есть таблица Dynatable - вот она отправляет ajax запросы для загрузки данных - при загрузке страницы, при пагинации и т.д. Так вот мне нужно при каждом таком запросе добавлять параметры в урл - каждый запрос они могут быть разные. И я не могу отслеживать все события которые инициируют ajax запрос. А евент хуков в этой таблице как кот наплакал - init, удачный запрос, апдейт и еще парочка, короче все срабатывают после загрузки данных.
Ответить с цитированием
  #4 (permalink)  
Старый 02.08.2018, 14:29
Профессор
Отправить личное сообщение для Bond Посмотреть профиль Найти все сообщения от Bond
 
Регистрация: 16.06.2013
Сообщений: 172

Nexus,
А нет, сорри. Я могу втулить beforeSend, но он не такой как в обычном ajax - он не передает функции параметры, но сама функция срабатывает. А в обычном запросе все норм.
Ответить с цитированием
  #5 (permalink)  
Старый 02.08.2018, 14:37
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,794

Bond,
Сообщение от Bond
А нет, сорри. Я могу втулить beforeSend, но он не такой как в обычном ajax - он не передает функции параметры, но сама функция срабатывает. А в обычном запросе все норм.
не понял.

Изменить тип запроса:
$.ajaxSetup({
	beforeSend:function(xhr,settings){
		this.type='POST';
	}
});
$.ajax(location.href,{type:'get'});
Ответить с цитированием
  #6 (permalink)  
Старый 02.08.2018, 17:38
Профессор
Отправить личное сообщение для Bond Посмотреть профиль Найти все сообщения от Bond
 
Регистрация: 16.06.2013
Сообщений: 172

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, 02.08.2018 в 17:43.
Ответить с цитированием
  #7 (permalink)  
Старый 02.08.2018, 22:40
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,794

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: []
    });
});
Ответить с цитированием
  #8 (permalink)  
Старый 03.08.2018, 00:15
Профессор
Отправить личное сообщение для Bond Посмотреть профиль Найти все сообщения от Bond
 
Регистрация: 16.06.2013
Сообщений: 172

Nexus,
Так тоже не пашет. В любом случае спасибо за подсказки.
Я решил по другому - немного костыльно правда.
При клике на пагинацию пока плагин таблицы думает и решает свои дела прежде чем отправить ajax, паралельно исполняется мой клик и он по шустрому пишет параметры в ajaxData ну а они свою очередь добавляются в урл как обычные GET.
Конечно так делать нельзя, но сколько раз пробовал - отказа не было ни разу - всегда мой клик успевает записать параметры прежде чем плагин отправит запрос.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ajax запрос через метод submit() n0kkw1n AJAX и COMET 7 16.12.2016 22:47
Post запрос Ajax вывод сообщения pro100deadly Элементы интерфейса 2 11.05.2016 22:44
Асинхронный ajax запрос imonzx AJAX и COMET 3 13.06.2015 00:02
Ajax get запрос RageXL AJAX и COMET 4 08.04.2014 18:52
ajax запрос с подгружемным js HelpeR AJAX и COMET 1 27.10.2008 12:44