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
相关产品推荐
相关产品推荐

