сразу видно уровень типичных "битриксойдов".
в общем, я так понимаю аякс, добавление в корзину, и ты кроме как id товара в скрипте ничего не знаешь.
можно конечно использовать всякие CIBlockElement::GetElementGroups и CIBlockSection::GetNavChain, но это приведет к тьме запросов в цикле, чем больше разделом, тем больше запросов и тем медленнее все работает.
я так понимаю тебе нужно узнать все родительские категории первого уровня, зная только id товара.
смотрим исходники ядра битрикса, и понимаем что
b_iblock_section - таблица разделов
b_iblock_section_element - таблица связи элементов и разделов
способ хранения дерева разделов в битриксе - nested sets
гуглим что это, читаем и разбираемся, поверь это более полезная информация, чем запоминание древнего api битрикса
ну и разобравшись, одним запросом из базы получаем все категории первого уровня к котором привязан товар, даже если он не привязан именно к этим к категориям, и привязан к подкатегориям этих категорий первого уровня
select
s.ID
from b_iblock_section_element se
inner join b_iblock_section l
on l.ID = se.IBLOCK_SECTION_ID
inner join b_iblock_section s
on s.IBLOCK_ID = l.IBLOCK_ID
and s.LEFT_MARGIN <= l.LEFT_MARGIN
and s.RIGHT_MARGIN >= l.RIGHT_MARGIN
and s.DEPTH_LEVEL = 1
where se.iblock_element_id = 2212954
group by s.ID