В 10й версии разбирал детально механизм работы ajax-добавления в корзину в демо-шаблоне, не думаю что сейчас многое изменилось.
Как оно работает:
1. при клике на ссылку "добавить" аяксом вызывается страница добавления товара в корзину с доп. параметром "&ajax_buy=1"
2. страница догружается до компонента sale.basket.basket.line, у него есть component_epilog.php с таким текстом
[CODE] function BasketLineAjaxResponse()
{
global $APPLICATION;
$APPLICATION->RestartBuffer();
$APPLICATION->IncludeComponent("bitrix:sale.basket.basket.line", ".default", $GLOBALS['BASKET_RESPONSE_AJAX_PARAMS'], false, array('HIDE_ICONS' => 'Y'));
die();
}
AddEventHandler('main', 'OnBeforeLocalRedirect', 'BasketLineAjaxResponse');[/CODE]Буквально - при наличии в запросе ajax_buy=1, перед вызовом функции LocalRedirect (а она как раз вызывается после процесса добавления в корзину в компоненте catalog.detail, catalog.section и т.д.) все что загрузилось до текущего момента сбрасывается, подключается компонент basket.line и выполнение страницы завершается. Соответственно вызывающему скрипту возвращается html-код только корзины.
Исходя из этой логики полная страница появится в корзине если компонент sale.basket.basket.line подключить после компонента catalog или catalog.detail, потому что LocalRedirect отрабатывает раньше чем устанавливается обработчик OnBeforeLocalRedirect