Laravel 8发送jQuery ajax PATCH请求提示路由不支持GET方法
问题原因
- URL重定向导致方法变更:这是这类问题最常见的诱因。Laravel内置的重定向规则会自动将末尾带斜杠的URL 301重定向到不带斜杠的地址,重定向过程中所有非GET请求都会自动转为GET方法,就会触发
GET方法不支持的报错。你可以先检查Network面板中实际发出的请求地址,是否和路由定义的格式完全一致,有没有多/少斜杠的情况。 - 路由参数缺失:你定义的路由需要
{ID}参数,如果Blade模板中的$ID变量为空,生成的URL会缺少最后一段参数,无法匹配到对应的PATCH路由,可能会匹配到其他同前缀的GET路由,触发报错。 - JS元素获取错误:你给select元素设置的id是
elementID,但JS代码中全部用getElementById('prist_popust')获取元素,如果页面没有id为prist_popust的元素,会导致update_url取值异常,请求到错误的地址。 - 权限校验重定向:你调用的
auth_check()函数如果内部有重定向逻辑(比如未登录跳转登录页),重定向后请求方法也会转为GET。
解决方案
- 先修复JS的元素选择错误:要么将select的id属性改为
prist_popust,要么将JS中所有getElementById('prist_popust')的参数改为elementID,保证能正确读取到data-update-url的取值。 - 确认路由生成的URL参数正常:打开浏览器开发者工具的Network面板,检查实际发出的请求URL是否正确填充了
{ID}参数,末尾有没有多余的斜杠,和路由定义的格式保持完全一致。 - 调整AJAX请求配置:你已经在请求参数中携带了
_method: "PATCH"做 Laravel 方法伪造,可以直接将AJAX的type参数改为POST,避免部分服务器、代理不支持PATCH原生方法的问题。 - 清理路由缓存:如果项目开启了路由缓存,运行
php artisan route:clear清理缓存,保证最新的路由定义生效。 - 如果确实存在URL末尾斜杠问题,也可以直接调整路由定义,在末尾加上斜杠和生成的URL保持匹配,避免触发重定向。
内容的提问来源于stack exchange,提问作者T5k
相关产品推荐
相关产品推荐

