После загрузки страницы для каждой ссылки с классом use-ajax создаётся объект Drupal.Ajax, в котором фиксируется адрес, на который по клику отправится ajax запрос. После создания этого объекта менять href ссылки уже бесполезно, надо вручную лезть в Drupal.ajax.instances и менять options.url у нужного объекта.
Ниже пример того, как можно перед отправкой ajax запроса автоматически менять его адрес на значение атрибута ссылки data-ajax-url:
(function (Drupal) {
/**
* Override AJAX "beforeSerialize" callback.
*/
var originalAjaxBeforeSerialize = Drupal.Ajax.prototype.beforeSerialize;
Drupal.Ajax.prototype.beforeSerialize = function (element, options) {
// Change request url to url from element data-ajax-url attribute
if (this.element) {
var elementAjaxUrl = this.element.dataset.ajaxUrl;
if (elementAjaxUrl) {
var wrapperFormatIndex = options.url.indexOf(Drupal.ajax.WRAPPER_FORMAT);
if (wrapperFormatIndex > 0) {
elementAjaxUrl += (elementAjaxUrl.indexOf('?') === -1) ? '?' : '&';
elementAjaxUrl += options.url.substring(wrapperFormatIndex);
}
options.url = elementAjaxUrl;
}
}
// Call original callback
return originalAjaxBeforeSerialize.apply(this, arguments);
};
})(Drupal);Так же это будет полезно, когда нужно чтобы ссылка вела на один адрес, а ajax запрос отправлялся на другой:
<a href="/node/123#body" data-ajax-url="/ajax/show-node-body/123" class="use-ajax">
Показать содержимое
</a>Или можно создавать ajax-ссылки совсем без адреса:
<a href="#" data-ajax-url="/ajax/show-node-body/123" class="use-ajax">
Показать содержимое
</a>Написанное актуально для
Drupal 8+
Похожие записи
- Однократное выполнение ajax запроса
- Отключить автоматический аплоад файлов у определённого поля
- Восстанавливаем позицию текстового курсора при ajax обновлении формы
- Как выполнять свой js-код до или после любых AJAX запросов (изменение работы AJAX API)
- Как в #ajax callback сгенерировать новую форму чтобы ей не мешали GET и POST данные текущего запроса
Комментарии
Норм вариант. Я делал так проверку запроса на ajax в контроллере:
Добавить комментарий