Bitrix Framework предоставляет несколько типов ответов из контроллеров, каждый из которых предназначен для определённого сценария: компонент, файл, JSON, HTML и др.

Аякс-загрузка компонента

Для асинхронной загрузки компонента достаточно вернуть

\Bitrix\Main\Engine\Response\Component из действия контроллера. Это аналог $APPLICATION->IncludeComponent().

class Item extends \Bitrix\Main\Engine\Controller
{
    public function viewAction($fileId)
    {
        return new \Bitrix\Main\Engine\Response\Component('bitrix:disk.file.view', '', [
            'FILE_ID' => $fileId,
        ]);
    }
}

На клиенте вызывается через BX.ajax.runAction(). HTML компонента будет в response.data.html.

BX.ajax.runAction('example.item.view', {
    data: { fileId: 2208 }
}).then(response => {
    Runtime.html(someNode, response.data.html);
});

Открытие компонента в слайдере

Если нужно отобразить компонент в слайдере (без iframe), используйте BX.SidePanel.Instance.open() с contentCallback.

BX.SidePanel.Instance.open("widget:file-props", {
    contentCallback: function(slider) {
        return new Promise(function(resolve) {
            BX.ajax.runAction('example.item.view', { data: { fileId: 2208 } })
                .then(response => resolve({ html: response.data.html }));
        });
    }
});

Скачивание файла

Для скачивания файла используйте \Bitrix\Main\Engine\Response\BFile.

return \Bitrix\Main\Engine\Response\BFile::createByFileId($fileId, 'Report.xlsx');

Ресайз изображения

Чтобы отдать уменьшенное изображение, примените \Bitrix\Main\Engine\Response\ResizedImage.

return \Bitrix\Main\Engine\Response\ResizedImage::createByImageId($imageId, 32, 32, 'thumb.jpg');

Типовой JSON

Для типичного ответа с данными и статусом используйте AjaxJson.

return \Bitrix\Main\Engine\Response\AjaxJson::createSuccess($message);

Произвольный JSON

Если нужен полностью произвольный JSON, используйте \Bitrix\Main\Engine\Response\Json.

return new \Bitrix\Main\Engine\Response\Json(["pong" => true]);

HtmlContent с ресурсами

Тип ответа \Bitrix\Main\Engine\Response\Component основан на \Bitrix\Main\Engine\Response\HtmlContent, который можно использовать, если вам нужно отдавать произвольный контент с ресурсами, а не именно компонент.

При этом js-обертка BX.ajax.runAction или BX.ajax.runComponentAction загрузит сама все ресурсы.

Планируется, что на данном типе ответа будет основан тип ответа Page.