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

Laravel使用Ajax提交POST请求报MethodNotAllowedException如何解决

问题原因及修复方案

1. 路由路径不匹配(核心导致MethodNotAllowedException的原因)

你的路由定义中不存在/users/store路径:

  • web.php里定义的路由路径是/store,命名为users.store
  • 但Ajax请求的url写为/users/store,路径不匹配导致Laravel找不到对应的POST路由,直接抛出方法不允许异常
    修复二选一即可:
  • 直接修改Ajax的url为匹配路径:url: '/store'
  • 更稳妥的方案是直接使用路由别名,将Ajax的url修改为url: "{{ route('users.store') }}",和表单action属性保持一致即可

2. 重复无效路由配置

web.php里重复定义了两次store路由,删掉旧版本写法,只保留适配当前Laravel版本的路由即可:

// 删掉这行旧版控制器调用写法
// Route::post('/store', 'usersController@store');
Route::post('store',[usersController::class, 'store'])->name('users.store');

3. Ajax参数配置错误

你当前把表单数据包裹在数组里,同时设置了processData: false和contentType: false,这两个参数仅在传输FormData二进制数据时需要开启,普通表单对象传参开启会导致Laravel无法正常解析POST参数。
修复后的Ajax相关代码:

// 去掉外层多余的数组[],直接传对象
const user = {
    "fname": $("input#fname").val(), 
    _token: $("input#token").val(), 
    "lname": $("input#lname").val(),
    "email": $("input#email").val(), 
    "pass": $("input#pass").val(),
    "confirm-pass": $("input#confirm-pass").val() 
};

$.ajax({
    url: "{{ route('users.store') }}", // 用路由别名避免路径写错
    method: 'post',
    data: user,
    // 删掉下面两个错误配置,普通表单提交不需要开启
    // processData: false,
    // contentType: false,
    dataType: 'json',
    // 原有beforeSend、success逻辑无需改动
})

4. 可选优化(避免后续出现其他错误)

  • 控制器中存储用户密码前需要加密,不要直接存明文:$user->password = Hash::make($request->pass);
  • 验证规则新增密码一致性校验:'confirm-pass' => 'required|min:8|max:20|same:pass'
  • HTML中按钮闭合标签写错,将</input>改为</button>

完成以上修改后即可解决405异常,实现Ajax无刷新提交效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:27:05