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

Laravel框架下提交JavaScript关联数组无法在PHP中取值

嘿,我知道你碰到的问题了——用JS数组存键值对提交到Laravel后端后拿不到对应数据,对吧?这其实是选错了JS的数据结构导致的,咱们一步步来解决:

问题根源

你用了Array()来创建data_push,但实际上你是在给它加自定义字符串键(比如type、level)。JS数组是为数字索引的有序集合设计的,当你用非数字键给数组加属性时,这些属性不会被jQuery的AJAX请求正常序列化提交,所以后端PHP根本接收不到这些键值对。

修复步骤

1. 把数组改成JS对象

把创建data_push的代码从数组换成普通对象,对象才是JS里用来存键值对的正确结构:

// 原来的错误写法
// var data_push = Array();

// 改成对象
var data_push = {};

修改后的完整JS代码示例:

var data_push = {}; 
$('form').on('change', 'select, textarea, input', function(t,s){ 
    var key = $(this).attr('id'); 
    var value = $(this).val(); 
    data_push[key] = value; 
}); 

$("#submit").click(function(){ 
    $.post("{!! URL::to('test') !!}", { 
        _token : tempcsrf, 
        req_data : data_push 
    }, function (resp, textStatus, jqXHR) { 
        alert('提交成功!');
        // 这里处理返回的响应内容
    });
});

2. Laravel后端接收数据

在你的Laravel控制器里,直接用Request实例获取提交的req_data即可:

use Illuminate\Http\Request;

public function test(Request $request)
{
    // 获取完整的req_data对象
    $reqData = $request->input('req_data');
    
    // 单独获取某个字段,比如type或level
    $type = $request->input('req_data.type');
    $level = $request->input('req_data.level');
    
    // 执行你的业务逻辑
    return response()->json(['status' => 'success', 'data' => $reqData]);
}
额外小技巧

如果之后需要提交更复杂的嵌套数据,也可以把对象转成JSON字符串提交,再在后端解析:

  • JS端:用JSON.stringify(data_push)把对象转成JSON字符串
  • Laravel端:用json_decode($request->input('req_data'), true)解析成关联数组

这样就能确保所有键值对都能正确传递到后端啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:57:17