Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Динамическое обновление маленькой корзины в шапке сайта

00 голосов
1
Добрый день!
Разрабатываю интернет-магазин, по сути все стандартное.

Суть проблемы вот в чем:

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

Как сделать так, что бы моя корзина в шапке сайта обновлялась сразу после добавления товара без перезагрузки страницы? Где мне найти сам ajax вызов файла компонента, который все это обрабатывает, я бы мог повесить на этот вызов какую-нибудь callback функцию? 

Пробовал делать так, после отработки анимации добавления товара в корзину подключал скрипт   

$.ajax({
type: "POST",
url: "/bitrix/templates/sportworld/include/back.php",
data: '',
success: function(html){
     $("#small_cart_form").empty().html(html);
}
}); 
, где url - файл с подключением компонента маленькой корзины,
success - очищает мое окно в хедере с маленькой корзиной, а затем возвращает в него свежие данные из вызванного файла.

Но беда в том, что чаще всего анимация добавления товара в корзину отрабатывается раньше попадания товара в базу и из-за этого мне возвращаются устаревшие данные.. Да и IE что-то ругался на такой способ..

Уже не знаю, как это решать, на форуме ничего толкового не нашел, кроме как переписать все добавление руками..

Спасибо заранее, очень признателен!
спросил 04 Сен, 13 от JimmYk (120 баллов)

1 Ответ

00 голосов
Вот это поможет

Код
<div id="cart_line">
      <?$APPLICATION->IncludeComponent("bitrix:sale.basket.basket.line", ".default", array(
         "PATH_TO_BASKET" => SITE_DIR."personal/cart/",
         "PATH_TO_PERSONAL" => SITE_DIR."personal/",
         "SHOW_PERSONAL_LINK" => "N"
         ),
         false,
         Array('')
         );
      ?>
</div>
ответил 04 Сен, 13 от Lusiola1 (260 баллов)
Он же именно это и делает, в файле "/bitrix/templates/sportworld/include/back.php" вызывает компонент маленькой корзины. Проблема у ТС в том, что JS анимация отрабатывает быстрей, чем сам товар попадает в корзину на стороне сервера.

Лично я бы в таком случае, сначала делал AJAX запрос, а потом уже, в success'е  делал анимацию и после неё вставлял новые данные.

И еще -- $("#small_cart_form").empty().html(html);  -- здесь не обязательно использовать "empty()", т.к. метод "html()" сам очищает контейнер перед вставкой новых данных.

Похожие вопросы

+1 голос
1 ответ
0 голосов
1 ответ
0 голосов
5 ответов
0 голосов
3 ответов
спросил 30 Июль, 13 от Fina (200 баллов)