Короткий ответ
Гонки кликов, двойные запросы, JS events, session/cart state, API idempotency и UI feedback. Разбираем практический порядок работ, риски, стоимость и то, как принять результат без новых проблем.
Ниже — конкретные проверки, команды, таблицы и контроль результата. Выполняйте изменения только после резервной копии, если действие затрагивает рабочую систему.
Почему товар «иногда» не добавляется
| Симптом | Что проверить |
|---|---|
| XHR не ушёл | JS handler / duplicate listeners |
| 403 | session/CSRF/WAF |
| 200 success=false | validation/options |
| После reload корзина старая | session/cache |
| Только товар с опциями | msOptionsPrice/options mapping |
| Двойной клик | duplicate request / debounce |
Поймать AJAX-ошибку в браузере
// DevTools Console: временно логируем fetch
const oldFetch = window.fetch;
window.fetch = async (...args) => {
console.log('fetch request', ...args);
const r = await oldFetch(...args);
console.log('fetch response', r.status, r.url);
return r;
};Смотреть MODX log во время добавления
tail -f /path/to/site/core/cache/logs/error.logПроверяйте один конкретный товар
Если сбой зависит от опций, артикула или остатка, сравните Request Payload успешного и неуспешного добавления. Это быстрее, чем переписывать весь frontend-код корзины.
Как проверить результат
После изменений повторите исходный сценарий, зафиксируйте результат и убедитесь, что соседние функции работают так же, как до правки. Если проблема проявляется не всегда, проведите несколько повторов в одинаковых условиях и сохраните диагностические данные.