Laravel 8结合Ajax请求问题:新手如何携带表单参数发起请求?
解决Ajax传参到Laravel后端的问题
你的核心问题是Ajax请求没有携带后端验证要求的search参数,另外还有两个细节需要注意:Laravel的CSRF令牌验证,以及后端返回格式要匹配前端的dataType。
前端Ajax修改
在$.ajax配置里添加data字段,把你获取到的details作为search参数传递,同时要带上Laravel的CSRF令牌(POST请求必须):
function myFunction() { var x = document.getElementById("frm1"); var details = x.elements.personSearch.value; document.getElementById("personValidation").innerHTML = ""; if (!details.match(/\b[a-zA-Z ]*\\[a-zA-Z ]*\\[0-3][0-9][0-1][0-9][0-9]{4}\b/g)) { document.getElementById("personValidation").innerHTML = "Your search does not match the required format"; return; } $.ajax({ url: "/api/pnc/person", type: "POST", dataType: "json", // 新增:传递参数+CSRF令牌 data: { search: details, _token: "{{ csrf_token() }}" // 如果是Blade模板,直接用这个生成令牌 }, success:function(response) { console.log(response); }, // 可选:添加错误回调,方便调试 error:function(xhr) { console.log(xhr.responseText); } }); }
如果你的JS代码是单独的JS文件(不是写在Blade模板里),需要先把CSRF令牌放到页面的meta标签中:
<!-- 在HTML头部添加 --> <meta name="csrf-token" content="{{ csrf_token() }}">
然后在JS里这样获取令牌:
_token: document.querySelector('meta[name="csrf-token"]').content
后端Laravel代码修改
后端需要返回JSON格式的响应,因为前端指定了dataType: "json",直接返回字符串会导致解析错误:
public function person(Request $request) { $request->validate([ 'search' => 'required' ]); // 返回JSON格式响应 return response()->json([ 'message' => '请求成功', 'search_content' => $request->search ]); }
额外说明
- 确保你的路由
/api/pnc/person是POST类型,在routes/api.php里定义:
Route::post('/pnc/person', [YourController::class, 'person']);
- 如果遇到419错误,就是CSRF令牌没传对,按照上面的方法检查令牌是否正确传递。
内容的提问来源于stack exchange,提问作者inkmoldy
相关产品推荐
相关产品推荐

