每日整理真实提问 356 个问题 · 726 个回答 需要系统性的技术文档?看 Shopify 技术百科 1000 篇 → 400-873-8117
已解决 提问于 17 天前

AJAX 加购一直返回 422,怎么读出具体原因

2 个回答 4,439 次浏览 主题与 Liquid 最后活跃 13 天前
43

自定义加购按钮走 /cart/add.js,大部分商品正常,个别的返回 422,响应体是 JSON 但看不出问题在哪。

L
Lily提问者
DTC 品牌独立站运营负责人
17 天前提问 · 已收到 2 个回答

2 个回答

已采纳 · 提问者确认解决
42

先把判断放在前面:422 表示请求被接受但业务校验失败,常见原因是库存不足、变体 id 不对、数量超过上限,或缺少必填的 selling plan。

1处理顺序

  1. 把响应体打印出来,读 description 和 message 字段,真实原因通常写在这里。
  2. 确认传的是变体 id(variant.id),不是商品 id;两者差一位数字,报错信息不会提示。
  3. 检查库存策略:continue 与 deny 下超卖行为不同,超量时表现就是 422。
  4. 有订阅或预售的商品必须带 selling_plan 参数。
  5. 加购前先查 variant.available 和 variant.inventory_quantity,在前端做一次拦截给用户提示。
验收:所有可售变体加购返回 200 并跳转或更新购物车,缺货变体给出明确提示而不是静默失败。
风 风格技术团队 回答于 16 天前
17

422 的响应体在 fetch 里也能读到,别只看 response.ok。写 if (!res.ok) { const err = await res.json(); console.warn(err.description); } 能省掉大量猜测。

泽 阿泽 · 前端工程师 · 15 天前

你的处理方式是什么?

写下你实际验证过的步骤,比「我也有这个问题」有用得多。当前版本为静态展示,提交后会由团队整理并回复。

描述你遇到的现象、店铺环境(主题 / 套餐 / 应用)、已经试过哪些操作……
我要单独提问 工作日 10 分钟内回复,可直接加微信 fenggejishu