You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用axios发起请求时无法获取validate()返回的验证错误

问题原因

Laravel的validate()方法校验失败时,会先判断当前请求类型:如果是期望返回JSON的API/AJAX请求,会返回422状态码的JSON格式错误信息;如果没识别到对应请求头,会默认返回302重定向跳转到上一页。这种302跳转axios会自动跟进,最终拿到200状态码的正常响应,自然不会进入catch回调。
另外你写的验证规则里|分隔符两侧加了空格,会导致Laravel解析规则异常,部分校验规则不生效,也会触发参数错误却走成功流程的问题。

修复步骤
  • 全局配置axios默认请求头,让Laravel正确识别API请求
    在你的axios初始化代码(一般是项目入口文件或者axios封装文件)里添加以下配置:
axios.defaults.headers.common['Accept'] = 'application/json';
axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

配置完成后,校验失败时Laravel会直接返回422状态码的错误响应,axios会自动进入catch分支,你就能正常通过error.response.data.errors拿到所有校验错误信息。

  • 修正后端验证规则格式
    去掉规则分隔符|两侧的空格,避免规则解析失效,修改后的校验代码如下:
public function store(Request $request)
{
    $fields = $request->validate([
        'product_name' => 'required',
        'product_cost' => 'required|integer',
        'product_selling' => 'required|integer',
        'product_stock' => 'required|integer',
    ]);

    Product::create([
        'name' => $fields['product_name'],
        'cost' => $fields['product_cost'],
        'selling' => $fields['product_selling'],
        'stock' => $fields['product_stock'],
    ]);
}
  • 额外说明:你提交的productState里携带的product_markup、markup_type、returned_errors三个未在校验规则中声明的字段,会被validate()方法自动过滤,不会影响正常校验和入库逻辑,不需要额外处理。

内容的提问来源于stack exchange,提问作者Mishen Thakshana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:33:59