Почему данные по корзине то приходят, то нет?

Доброго,
пытаюсь получить данные по количеству в корзине. Информация то есть, то нету, но товар исправно попадает в корзину.
В чем ошибаюсь? Думаю про кэш, но его не должно быть по идеи.

api для текущего количества в корзине

use Bitrix\Main\Loader;
Loader::includeModule('sale');
Loader::includeModule('catalog');
$cntBasketItems2 = CSaleBasket::GetList(
	array(),
	array(
		"FUSER_ID" => CSaleBasket::GetBasketUserID(),
		"LID" => "s5",
		"ORDER_ID" => "NULL"
	),
	array()
);


html корзина
<div id="" class="bx-basket bx-opener" style="display: contents;">
		<a href="/dverimall/personal/cart/" class="basket-button">
			<i class="basket-button__icon">
				<span class="basket-button__count" style="" id="tt"><?echo $cntBasketItems2;?></span>
			</i>
		</a>
</div>


js получения данных из обработчика
$.get('/bitrix/templates/dveri/ajax/count_basket.php').done(function(data){
								data = $.parseJSON(data);
								$('#tt').text(data);
							});


обработчик для получения обновленных данных из коризны
use Bitrix\Main\Loader;
Loader::includeModule('sale');
Loader::includeModule('catalog');

$cntBasketItems = CSaleBasket::GetList(
	array(),
	array(
		"FUSER_ID" => CSaleBasket::GetBasketUserID(),
		"LID" => "s5",
		"ORDER_ID" => "NULL"
	),
	array()
);

if ($cntBasketItems === 0) {
	// Если в корзине нет товаров
}

echo json_encode($cntBasketItems);


js срабатывает, как только кладу что то в корзину

upd
схема такая. кладу товар №1 - данные приходят верные. иду во вторый товар №2 кладу его - данные приходят неверные. после обновления страницы количество обновляется
  • Вопрос задан
  • 139 просмотров
Решения вопроса 1
@PetrPo
Ориентир - у тебя несколько ajax-ов срабатывает. js - асинхронный. И хоть ты и думаешь, что первый раз у тебя правильно работает, а второй не правильно - это не так, в одной из n-цать попыток первый раз тоже сработает неправильно
1-ый ajax
$.ajax({
                url: '/bitrix/templates/dveri/ajax/basket.php'

2-ой ajax
$.get('/bitrix/templates/dveri/ajax/count_basket.php').done(function(data){


По-умолчанию $.ajax параметр async = true, поэтому у тебя есть 3 варианта решения проблемы
1. Переделать вызов функции $.get на $.ajax и в обоих вызовах добавить параметр
$.ajax({
//.............
async: false,
//.............

2. Перенести вызов функции $.get в success $.ajax({
3. Сделать через async await (равносильно, если прописать промисы, но это не круто), выглядит это так
//.............
 $("#send").on("click", async function () {
//.............
await  $.ajax({
//.............
await $.get('/bitrix/templates/dveri/ajax/count_basket.php').done(function(data){
//.............
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы