РазделВеб-разработка
Чтение8 мин
Дата22 сентября 2026
ФорматПрактическая статья
Сначала поймайте запрос добавления товара
Откройте DevTools → Network, нажмите «Добавить в корзину» один раз и найдите XHR/fetch. Смотрите Request Payload, HTTP status, Response и Set-Cookie.
Симптом → куда смотреть
| Симптом | Первая проверка |
|---|---|
| Кнопка не реагирует | Console / event handler |
| Запрос 400/422 | validation / product id / options |
| 403 | CSRF/WAF/session |
| 500 | backend 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);Проверка после исправления
Пройдите минимум: добавить товар → изменить количество → удалить → обновить страницу → открыть второй таб → авторизоваться/разлогиниться → оформить заказ. Корзина должна сохранять предсказуемое состояние на каждом шаге.