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

Laravel中AJAX传递复选框数据失败,控制器接收空数组

解决Laravel中AJAX传递复选框数据返回空数组的问题

下面是导致数据无法传递的核心问题及修复方案:


1. 路由请求方式不匹配

前端AJAX使用POST请求,但路由定义为GET,导致请求被拦截,数据无法到达控制器。
修复路由:

Route::post('save_data',[ventas1Controller::class,'save_data'])->name('save_data');

2. 复选框选择器错误

前端脚本通过$('.prod-id')选择复选框,但HTML中的复选框仅设置了重复的id="prod-id"(id必须唯一),未添加对应class,导致无法选中目标元素。
修复HTML复选框:

<td>
    <input type="checkbox" name="prodid" class="prod-id" value="{{ $ventas->id }}">
</td>

注:将value改为实际的记录ID(如$ventas->id),而非固定值mobile,确保传递真实数据

3. 可选优化:简化CSRF令牌传递

可以通过meta标签全局设置CSRF令牌,避免在每个AJAX请求中重复写入:
添加meta标签:

<meta name="csrf-token" content="{{ csrf_token() }}">

修改JS脚本:

$(document).ready(function(){
    // 全局设置CSRF令牌
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });

    $('.save_btn').on('click',function(e){
        e.preventDefault();
        const prodid= [];
        $('.prod-id').each(function(){
            if($(this).is(":checked")){
                prodid.push($(this).val());
            }
        });
        
        $.ajax({
            url:'{{ route('save_data') }}',
            type: 'POST',
            data: {
                prodid: prodid
            },
            success:function(response){
                console.log('数据接收成功:', response);
            },
            error:function(xhr){
                console.log('请求错误:', xhr.responseText);
            }
        });
    });
});

调试建议

  • 打开浏览器开发者工具的「Network」标签,查看AJAX请求的「Form Data」,确认数据是否正确发送
  • 在控制器中直接打印目标数组:
public function save_data(Request $request) {
    dd($request->prodid);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 09:45:34