Drupal → Как выполнить свой js-код до или после ajax запроса

11.06.2014

Для всех ajax запросов:

var ajaxBeforeSend = Drupal.ajax.prototype.beforeSend;
Drupal.ajax.prototype.beforeSend = function(xmlhttprequest, options) {
  console.log('before send');
  ajaxBeforeSend.apply(this, arguments);
}

var ajaxSuccess = Drupal.ajax.prototype.success;
Drupal.ajax.prototype.success = function(response, status) {
  console.log('after send');
  ajaxSuccess.apply(this, arguments);
}

Для определённого элемента если известен его id, на который уже навешен ajax обработчик:

var ajaxBeforeSend = Drupal.ajax['id-элемента'].beforeSend;
Drupal.ajax['id-элемента'].beforeSend = function (xmlhttprequest, options) {
  console.log('before send');
  ajaxBeforeSend.apply(this, arguments);
};

var ajaxSuccess = Drupal.ajax['id-элемента'].success;
Drupal.ajax['id-элемента'].success = function (response, status) {
  console.log('after send');
  ajaxSuccess.apply(this, arguments);
};

Для определённого элемента, если самостоятельно навешиваете ajax обработчик:

Drupal.ajax[...] = new Drupal.ajax(..., this, {
  ...
  beforeSend: function (xmlhttprequest, options) {
    console.log('before send');
    Drupal.ajax.prototype.beforeSend.apply(this, arguments);
  },
  success: function (response, status) {
    console.log('after send');
    Drupal.ajax.prototype.success.apply(this, arguments);
  },
});

Или можно с помощью jQuery в обход друпала.

Написанное актуально для
Drupal 7
Похожие записи

Комментарии

Почему то в первом случае срабатывает, а при обращении к конкретной форме ну никак не могу прицепиться.
https://sksinmar.ru/uslugi/stroitelstvo
В консоли видна ошибка и откуда вызов идет.

Пишу:

var ajaxSuccess = Drupal.ajax['webform-client-form-68'].success;
Drupal.ajax['webform-client-form-68'].success = function (response, status) {
		console.log('after send');
		ajaxSuccess.apply(this, arguments);
};

Может где-то неправильно пишу?

Добавить комментарий