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

Laravel 5中AJAX提交数据异常:页面刷新无数据返回求助

解决Laravel 5中AJAX提交表单页面刷新且无法获取数据的问题

嘿,我来帮你搞定这个Laravel AJAX的问题!你遇到的页面刷新、拿不到数据的情况,大概率是CSRF token没处理好,或者事件绑定出了问题,咱一步步来解决:

1. 先搞定CSRF Token(这是核心坑点)

Laravel默认开启了CSRF保护机制,所有POST请求必须携带合法的CSRF token,不然请求会被直接拦截,这时候表单就会触发默认的提交行为——也就是你看到的页面刷新、URL带token的情况。

你可以这么做:

  • 先在页面的<head>里加个meta标签,把token存起来:
<meta name="csrf-token" content="{{ csrf_token() }}">
  • 然后在你的JS代码最前面加一段全局配置,让所有AJAX请求自动带上这个token:
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

要是不想全局配置,也可以直接把token塞进AJAX的data参数里:

data: { 
    mydata: select_form, 
    _token: '{{ csrf_token() }}'
},

2. 检查表单提交事件是否真的被拦截了

页面刷新说明e.preventDefault()可能没生效,咱先确认事件有没有被触发:

$('#record_form').on('submit', function (e) {
    e.preventDefault();
    console.log('表单提交事件触发啦!'); // 打开浏览器控制台(F12)看有没有这个输出
    // 后面的AJAX代码...
});

如果控制台没输出,那就是事件绑定出问题了:

  • 先检查表单的id是不是真的叫record_form,别写错字
  • 要是你的JS代码是放在<head>里的,得把它包在$(document).ready()里,确保DOM加载完再绑定事件:
$(document).ready(function() {
    $('#record_form').on('submit', function (e) {
        e.preventDefault();
        // 你的AJAX代码...
    });
});

3. 优化数据传递和控制器接收逻辑

你现在把序列化后的表单数据塞进了mydata字段里,控制器里$request->all()拿到的是一个包含mydata键的数组,里面是一串序列化的字符串。要是想直接拿到表单的各个字段,可以直接把序列化后的内容作为AJAX的data:

data: $('#select_form').serialize(),

这样控制器里$request->all()就能直接拿到每个表单字段的键值对了。

要是你就想保持原来的mydata结构,那在控制器里得把序列化字符串解析一下:

public function saveAjax(Request $request) {
    parse_str($request->mydata, $formData);
    dd($formData); // 这样就能看到解析后的表单数据了
}

4. 用开发者工具排查请求状态

打开浏览器的开发者工具(按F12),切换到「Network」标签,提交表单后看看有没有/ajaxdemo的POST请求:

  • 如果看不到这个请求:说明事件绑定肯定有问题,回到第二步检查
  • 如果请求状态是419:那就是CSRF token没传对,回到第一步调整
  • 如果请求成功:看看「Response」标签里有没有dd()输出的内容,要是有就说明数据已经传过来了

按这几步走下来,应该就能解决你的问题啦!

内容的提问来源于stack exchange,提问作者Raj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:26:46