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

不使用Ajax将JavaScript数组传递给Laravel控制器的问题

如何将多维JavaScript数组完整传递给Laravel控制器

问题场景

尝试通过隐藏表单字段传递多维JavaScript数组到Laravel控制器时,数组被扁平化,丢失了原有的多维结构:

前端JavaScript数组结构

0 : (4) ['Name', 'contact_email', 'phone number', 'contact_location']
1 : (5) ['John Doe', 'john.doe@example.com', '15551234567', '"New York', ' NY"']
2 : (5) ['Jane Smith', 'jane.smith@example.com', '15552345678', '"Los Angeles', ' CA"']
3 : (5) ['Robert Johnson', 'robert.johnson@example.com', '15553456789', '"Chicago', ' IL"']
4 : (5) ['Emily Davis', 'emily.davis@example.com', '15554567890', '"Houston', ' TX"']

原表单代码

<form id="importContact" action="{{url('reviewContacts')}}" method="post">
    @csrf
    <input type="hidden" id="contacts" name="data">
</form>

原JavaScript提交代码

$("#contacts").val('');
$('#contacts').val(dataArray); 
$("#importContact").submit();

控制器接收的扁平化数组

Array ( [0] => Name,contact_email,phone number,contact_location,John Doe,john.doe@example.com,15551234567,"New York, NY",Jane Smith,jane.smith@example.com,15552345678,"Los Angeles, CA",Robert Johnson,robert.johnson@example.com,15553456789,"Chicago, IL",Emily Davis,emily.davis@example.com,15554567890,"Houston, TX", )

解决方案

方法1:JSON序列化传递(推荐)

通过将数组转为JSON字符串传递,后端再解析为数组,这是最简洁的方式。

前端修改

使用JSON.stringify()将多维数组转为字符串后赋值给隐藏字段:

$("#contacts").val(JSON.stringify(dataArray)); 
$("#importContact").submit();

Laravel控制器处理

接收参数后用json_decode()解析为多维数组:

public function reviewContacts(Request $request)
{
    // 第二个参数设为true,将JSON对象转为关联数组
    $data = json_decode($request->input('data'), true);
    // 此时$data与前端数组结构完全一致
    dd($data);
}

方法2:利用表单数组命名规则

通过动态生成对应数组结构的隐藏字段,让Laravel自动识别为多维数组。

前端修改

移除原单个隐藏字段,动态生成匹配数组结构的隐藏字段:

// 先清理已存在的动态字段
$('#importContact').find('input[name^="data["]').remove();

// 遍历多维数组生成字段
dataArray.forEach((row, rowIndex) => {
    row.forEach((value, colIndex) => {
        $('<input>', {
            type: 'hidden',
            name: `data[${rowIndex}][${colIndex}]`,
            value: value
        }).appendTo('#importContact');
    });
});

// 提交表单
$("#importContact").submit();

Laravel控制器处理

直接接收request()->data即可得到完整多维数组:

public function reviewContacts(Request $request)
{
    $data = $request->input('data');
    // $data结构与前端一致
    dd($data);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 01:55:59