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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:40:31