Сначала поймайте запрос добавления товара

Откройте DevTools → Network, нажмите «Добавить в корзину» один раз и найдите XHR/fetch. Смотрите Request Payload, HTTP status, Response и Set-Cookie.

Симптом → куда смотреть

СимптомПервая проверка
Кнопка не реагируетConsole / event handler
Запрос 400/422validation / product id / options
403CSRF/WAF/session
500backend log
200, но счётчик не меняетсяJS parsing/state
После перезагрузки корзина пустаяsession/cookie/domain
Дубли товараповторный submit/retry без идемпотентности

Проверить endpoint корзины вручную

BASH
curl -i -X POST https://example.com/api/cart/add   -H 'Content-Type: application/json'   -d '{"product_id":123,"qty":1}'

# Если endpoint использует cookies/CSRF,
# повторяйте запрос только с тестовыми данными и нужной сессией.

Если корзина теряется после перезагрузки

  • проверьте cookie Domain/Path/SameSite/Secure;
  • сравните HTTP и HTTPS;
  • убедитесь, что backend пишет session в одно и то же хранилище;
  • если несколько серверов — нужна общая session storage или sticky sessions;
  • проверьте, не меняется ли session id при каждом AJAX-запросе.

Если проблема только у части браузеров

Сравните cookies и Console. Не храните критичную корзину только в localStorage без серверной синхронизации: пользователь сменит устройство или очистит данные браузера.

Быстрая JS-диагностика ответа

JAVASCRIPT
fetch('/api/cart')
  .then(async (r) => {
    console.log('status', r.status);
    console.log('content-type', r.headers.get('content-type'));
    const text = await r.text();
    console.log('body', text);
  })
  .catch(console.error);

Проверка после исправления

Пройдите минимум: добавить товар → изменить количество → удалить → обновить страницу → открыть второй таб → авторизоваться/разлогиниться → оформить заказ. Корзина должна сохранять предсказуемое состояние на каждом шаге.

Связанные материалы