Как в современном Битрикс корректно показать во всплывающем окне компоненту, полученную AJAX запросом?

Вынужден задавать вопрос мировому сообществу, т.к. поддержка Битрикс не пожелалал помочь, ссылаясь на частность решения (2363153 Как в современном БУС корректно показать во всплывающем окне компоненту, полученную AJAX запросом?).

Имеем на входе тяжелую компоненту 2.0 (других сейчас не используют). Также в распоряжении свежий main и ui. Нужно запросить ее выдачу и показать во всплывающем окне. И лучше (раз уж о Битрикс речь) средствами BX.

Типовой способ (очень древний) - использование компоненты в режиме AJAX. К сожалению, быстро найти документацию по вопросу не смог. Есть древний файл (тогда еще так писали). Но его сюда не вложить.
Он вообще здесь не подходит (не для того, это для последующего взаимодействия и обновления только части страницы).

Ну и решения от разработчиков:
  • Вывести компоненту в обычном режиме, но в скрытом блоке (а потом показать скриптом). Этот вариант не подходит по условиям задачи - компонента тяжелая, а выдача нужна не всегда.
  • Накатать отдельный скрипт PHP. Сделать под него отдельный шаблон сайта. Примерно это описано тут.


Во втором случае на BX.ajax вступает в силу параметры конфигурации запроса processData, scriptsRunFirst и emulateOnload.

Из новинок есть контроллеры AJAX. Но эта задумка ближе к REST, т.к. нацелена на обмен JSON.

Может я что-то пропустил?
  • Вопрос задан
  • 2519 просмотров
Решения вопроса 1
@bitrixworkshop Автор вопроса
Решил на основе \CMain::ShowAjaxHead. Разумеется, документации на нее нет. Нашел в исходниках.
Задачу вывода скриптов и стилей вызванной компоненты она решает.

Накатал свой AJAX скрипт, вызывающий любую компоненту. Отличие от новой задумки Битрикс (AJAX-контроллеры) в HTML, а не JSON ответе.

Также сделал свою подгружаемую JS библиотеку (использовал BX.ajax.promise и BX.ajax.submitAjax).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
winer
@winer
занимаюсь разработкой сайтов на 1c-bitrix
Из новинок есть контроллеры AJAX. Но эта задумка ближе к REST, т.к. нацелена на обмен JSON.


Это очень даже интересный инструмент. С его помощью очень просто писать ajax запросы к своим компонентам. В теле JSON ответа вы можете передать и HTML, передав его в один из параметров как обычную строку.

По сути для ajax запросов к своему компоненту надо всего лишь:
  1. У класса компонента реализовать интерфейс Controllerable
  2. Методы которые должны отвечать на ajax запросы должны иметь суффикс action
  3. С клиентской стороны нужно использовать BX.ajax.runComponentAction


Все очень просто.

По видео на youtube, на которое вы указали ссылку, есть статья https://verstaem.com/ajax/new-bitrix-ajax/ .

Лично я над методом BX.ajax.runComponentAction делаю свою обертку, чтобы можно было в одном месте одинаково отлавливать сообщения об ошибках и единообразно обрабатывать ответ.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы