Иногда бывает нужно перехватить одно из ajax событий Drupal, которое выполняется перед или после отправки ajax запроса и добавить свой javascript, который выполнит необходимые нам действия. Рассмотрим перехват beforeSerialize, который выполняется перед отправкой ajax запроса и подготавливает содержимое запроса. Для этого можно воспользоваться следующим javascript кодом:

(function($) {
  Drupal.behaviors.myModuleBehavior = {
    attach: function(context, settings) {
 
      Drupal.ajax.prototype.originalBeforeSerialize = Drupal.ajax.prototype.beforeSerialize;
      Drupal.ajax.prototype.beforeSerialize = function(element, options) {
 
        var someFormName = 'id-of-our-form' // пример: 'views-exposed-form-for-dno-page-1
        // Если это не наша форма (нужный нам запрос), то выполняем оригинальный обработчик.
        if (element['context']['id'] != someFormName) {
          return this.originalBeforeSerialize(element, options);
        }
 
        // Если это нужный нам запрос, то выполняем свои действия
        alert('I am here!');
 
       // Выполняем оригинальный обработчик
       return this.originalBeforeSerialize(element, options);
 
    }
  };
})(jQuery);

Если Вам необходимо перехватить beforeSend, который выполняется непосредственно перед отправкой запроса, то замените beforeSerialize на beforeSend в коде выше. Аналогично для success, который выполняется при получении ответа от сервера - заменяем beforeSerialize на success.

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