使用Yajra DataTables展示MySQL数据时遇405 Method Not Allowed错误
解决Yajra DataTables GET (405) Method Not Allowed错误
问题根源
路由定义为POST请求,但Yajra DataTables在serverSide模式下默认发送GET请求,导致请求方法不匹配,触发405错误。同时代码存在两处细节问题需要修正。
修复步骤
调整请求方法匹配
有两种可选方案:- 修改路由为GET(符合DataTables默认行为)
Route::get('/services/recieve', [serviceController::class,'ajaxservice'])->name('service.ajaxservice'); - 若必须使用POST,修改DataTables的ajax配置指定请求方法
在Blade视图的DataTables初始化代码中,将ajax配置改为对象形式:$('#service').DataTable({ processing: true, serverSide: true, ajax: { url: "{{ route('service.ajaxservice') }}", type: 'POST' }, columns: [ {data: 'id'}, {data: 'service'}, ] });
- 修改路由为GET(符合DataTables默认行为)
修正控制器的AJAX判断
原代码中$request->ajax是错误写法,需调用方法$request->ajax();同时serverSide模式下不要直接用all()获取全部数据,应传入查询构建器让DataTables自动处理分页、排序逻辑:public function ajaxservice(Request $request){ $serviceQuery = servicesModel::query(); if($request->ajax()){ return DataTables::of($serviceQuery)->make(true); } // 非AJAX请求可返回对应视图 return view('services.index'); }
内容的提问来源于stack exchange,提问作者nadeesha
相关产品推荐
相关产品推荐

