Laravel后端Ajax POST请求报404错误排查与解决
Laravel Ajax POST请求404问题排查与解决
最近在Laravel项目里第一次尝试用Ajax绑定下拉框onchange事件时,踩了个典型的请求匹配坑,跟大家梳理下整个过程:
我的初始代码
前端Ajax脚本(绑定下拉框onchange)
function createcomploadtemplate(){ var ifprefix = $("#createcomploadtemplatedropdown").find("option:selected").text(); var getidtemplate = $('#createcomploadtemplatedropdown').val(); $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); $.ajax({ type: 'POST', url: 'ajaxfixedcompany', data: {getidtemplate:getidtemplate,ifprefix:ifprefix}, dataType: 'json', encode : true, success: function(data){ alert(data.success); } }); }
Laravel路由配置
Route::post('ajaxfixedcompany',['middleware' => 'auth', 'as' => 'ajaxfixedcompany', 'uses' => 'AjaxController@ajaxfixedcompany']);
控制器方法(初始错误版本)
public function ajaxfixedcompanyget(Request $request){ $response = array( 'status' => 'success', 'msg' => $request->message, ); return response()->json($response); }
遇到的问题
不管请求URL是带斜杠的/ajaxfixedcompany还是不带斜杠的ajaxfixedcompany,都返回404 Not Found错误。
问题根源
仔细核对后发现核心矛盾:
- 前端Ajax明确发送的是POST请求
- 路由也配置了
Route::post,指向控制器的ajaxfixedcompany方法 - 但实际控制器里只写了一个名为
ajaxfixedcompanyget的GET风格方法,三者完全不匹配,Laravel找不到对应的POST请求处理逻辑,自然返回404。
修正方案
只需要把控制器的方法名修改为路由中指定的ajaxfixedcompany即可,确保请求类型、路由指向和控制器方法完全对应:
public function ajaxfixedcompany(Request $request){ $response = array( 'status' => 'success', 'msg' => $request->message, ); return response()->json($response); }
如果坚持要保留ajaxfixedcompanyget这个方法名,也可以调整路由的uses参数(不过更推荐前者,保持命名一致性):
Route::post('ajaxfixedcompany',['middleware' => 'auth', 'as' => 'ajaxfixedcompany', 'uses' => 'AjaxController@ajaxfixedcompanyget']);
另外补充:前端的CSRF Token配置是正确的,这部分不用修改,已经通过$.ajaxSetup全局设置了请求头,避免了Laravel的CSRF验证错误。
内容的提问来源于stack exchange,提问作者Jurick Pastechi Genaro
相关产品推荐
相关产品推荐

