Битриксоид из Колхоза
745 subscribers
298 photos
9 videos
5 files
98 links
Изучаем #Битрикс, находим ошибки, обслуживаем проекты, пишем модули, разрабатываем компоненты.

Ютуб: shorturl.at/himBM
Модуль-ускоритель: shorturl.at/lsyTW
Модуль комментариев: shorturl.at/ACDT2
Сайт разработчика: https://burlaka.studio
Download Telegram
Когда мы принимаем аякс-запрос, данные могут приходить как в нормальном виде — готовом к работе (если проект под UTF), так и нет (кракозябры: проект под windows-1251).

\CUtil::decodeURIComponent( [...] )
...рекурсивно перекодирует массив в нужный вид.
Вызываем её с массивом полученных параметров (передаётся внутрь указатель на массив).

Фактически, обычная обёртка над конвертером символов.

#битрикс #аякс #ajax
===






Если мы обрабатываем аякс-запросы «вручную»
...и если у нас во время обработки вызывается хотя бы один компонент
...и если ответ который мы должны отдать — json
...и если механизмом воспользуется пользователь с доступом к административной панели
...и если в интерейсе пользователя будет установлен
чекбокс «Переходить в режим правки сайта без перезагрузки страницы»
= аякс будет падать с ошибкой парсинга json, потому что механизм компонентов будет пытаться оборачивать его в специальный div

Чтобы этого избежать, нам нужно объявить константу
@define( 'ADMIN_SECTION', true );
...но сделать это после того, как подключится пролог.

#битрикс #аякс #ajax.
===






Если мы обрабатываем аякс-запросы «вручную»
...и если ответ который мы должны отдать — json
...и если у нас активирован режим отладки
= аякс будет падать с ошибкой парсинга json, потому что к ответу будет дописываться отладочная информация.

Чтобы этого избежать, нам нужно объявить константу
define( 'PUBLIC_AJAX_MODE', true );

#битрикс #аякс #ajax.
=====



BX-функция, собирающая урл и параметры в одну строку
BX.util.add_url_param( ajaxUrl, ajaxUrlParams )

Пример:
BX.util.add_url_param( 
ajaxUrl,
{
id: id,
scroll: 'Y'
}
);

#битрикс #BX #ajax #js
=====
is ajax

Внутри \Bitrix\Main\Page\Asset
работает private переменная-флаг ajax.

Его «целевой» потребитель — метод
\Bitrix\Main\Page\Asset::getInstance()->getCss(),
...который в случае установленного аякс-флага пакует стили не в <link...> а оборачивает в javascript-вызов и тогда подключение стилей выглядит например так:
<script type="text/javascript">
BX.loadCSS(['.../.default/style.css?1556374578666']);
</script>

Флаг работает только в паре с инициализацией аякс-шапки
$APPLICATION->ShowAjaxHead(...);
...который его зажигает.

То есть если мы собираем свой аякс-обработчик, чтобы стили были обёрнуты для корректной обработки ответа BX-функциями, мы должны проинициализировать аякс-шапку.

#битрикс #аякс #ajax #BX
Битриксоид из Колхоза
===== is ajax Внутри \Bitrix\Main\Page\Asset работает private переменная-флаг ajax. Его «целевой» потребитель — метод \Bitrix\Main\Page\Asset::getInstance()->getCss(), ...который в случае установленного аякс-флага пакует стили не в <link...> а оборачивает…
Публичным «братом» указанного флага является
$APPLICATION->bInAjax;
...который мы можем проверять например внутри своих компонентов.

Важно помнить, что оба устанавливаются только при иниализации аякс-шапки:
$APPLICATION->ShowAjaxHead(...);

#битрикс #аякс #ajax #BX
Битриксоид из Колхоза
Публичным «братом» указанного флага является $APPLICATION->bInAjax; ...который мы можем проверять например внутри своих компонентов. Важно помнить, что оба устанавливаются только при иниализации аякс-шапки: $APPLICATION->ShowAjaxHead(...); #битрикс #аякс…
Трио-счастья для джсон-аякса замыкает метод
\Bitrix\Iblock\Component\Base::sendJsonAnswer($result);
...который пакует переданный ему массив в джсон, делает нужные финализации и рубит скрипт.

Массив может содержать всё нужное для паредачи наружу. JS метод допакует сам.

#битрикс #json #аякс #ajax
=====
Аякс ли?

use Bitrix\Main\Context;
$request = Context::getCurrent()->getRequest();

if ($request->isAjaxRequest()) {
// do something
}

HTTP_BX_AJAX нигде не обнаружен. То ли пережиток, то ли закладка на будущее 🤔

#битрикс #аякс #ajax