xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Однократное выполнение ajax запроса

Опубликовано в

Часто возникает необходимость, чтобы ajax ссылка с классом use-ajax выполнила запрос ровно один раз, после чего прекратила реакцию на клики (например это ссылка загрузки контента в таб). Реализовать задуманное можно с помощью небольшого костыля подменяющего Drupal.Ajax.prototype.eventResponse:

(function ($, Drupal) {
  /**
   * Override AJAX eventResponse function.
   */
  var originalAjaxEventResponse = Drupal.Ajax.prototype.eventResponse;
 
  Drupal.Ajax.prototype.eventResponse = function (element, event) {
    var $element = $(element);
 
    if ($element.hasClass('use-ajax-once')) {
      if ($element.data('ajax-done')) {
        this.ajaxing = true;
      }
      else {
        $element.data('ajax-done', true);
      }
    }
 
    originalAjaxEventResponse.apply(this, arguments);
  };
})(jQuery, Drupal);

Использование — подключить js файл на страницу, добавить ссылке помимо класса use-ajax класс use-ajax-once.

P.S: запрос на добавления подобного функционала в ядро лежит с 2010 года :)

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

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании