Laravel控制器无法获取AJAX提交的name数组输入值问题排查
解决Laravel控制器无法获取AJAX提交的name参数问题
咱们一步步排查并解决这个问题:
1. 先修复HTML里的重复ID问题
你的两个input元素ID完全重复(都是id="1"),这违反了HTML的核心规范——ID必须是页面唯一的。这会导致onchange触发时,JS无法精准定位到对应的输入框,后续AJAX获取值自然会出问题。先把ID改成唯一的:
<input type="text" id="input1" name="name[1]" class="input-number" onchange="input_onchange(this.id)" value="39" min="1" max="25"> <input type="text" id="input2" name="name[2]" class="input-number" onchange="input_onchange(this.id)" value="39" min="1" max="25">
2. 修正AJAX里的选择器语法错误
你的jQuery选择器写法有问题:因为input的name属性值包含方括号[],必须用引号包裹才能让jQuery正确解析。原来的写法会导致JS找不到对应的输入框,最终提交的name参数是空值。修改AJAX的data部分:
$.ajax({ type: 'POST', url: '/sepetim/ajax', data: { '_token': $('input[name="_token"]').val(), // 用双引号包裹name属性值,避免语法解析错误 'name': $('input[name="name[' + id.replace('input', '') + ']"]').val() }, success: function(data) { $('#fiyat').replaceWith("<span class='para fw6'>" + data.formattedPrice + " TL</span>"); } });
这里因为我们把ID改成了input1/input2,所以用id.replace('input', '')提取对应的数字索引;你也可以更直接,把onchange改成input_onchange(1)/input_onchange(2),直接传索引值会更简洁。
3. 控制器里的参数获取验证
前端修正后,控制器的$data->name = $request->input("name")应该能正常拿到值了。如果还是有问题,可以用以下方式排查:
- 先打印整个请求内容,确认参数是否真的提交到后端:
dd($request->all()); // 查看所有提交的参数,确认name是否存在 - 也可以尝试其他参数获取方式:
$data->name = $request->get('name'); // 或者直接用属性访问 $data->name = $request->name;
额外检查点
- 确保页面里存在
name="_token"的隐藏输入框,CSRF令牌必须正确提交,否则Laravel会直接拒绝请求。 - 打开浏览器开发者工具的Network面板,查看AJAX请求的Form Data,确认
name参数是否正确携带了输入值。
内容的提问来源于stack exchange,提问作者ufuk
相关产品推荐
相关产品推荐

