PHP获取multiselect请求参数异常:为何无法通过索引取值?
问题原因
你前端的Ajax请求构造方式错误,导致后端收到的properties数组格式不符合预期:
- 你把整个
properties数组作为单个value传递给properties[]参数,浏览器会自动将这个数组转为字符串(比如["1","2"]会变成"1,2")。 - Laravel接收到这个字符串后,会将其放入
properties数组中,最终得到["1,2"]——这是一个仅包含1个字符串元素的数组。
至于你遇到的key 0未定义错误,大概率是代码中访问$request->get('properties')[0]前,没有确认数组是否非空(比如某次请求中没有选中任何属性,导致properties是空数组),但核心问题还是前端提交方式错误。
解决办法
修改前端代码,将每个选中的属性值单独添加到请求数据中,而非传递整个数组:
// Get selected properties. const properties = []; multiselect.getValue().forEach(element => { properties.push(element.value); }); // Added selected properties to data. var data = form.serializeArray(); // 遍历数组,逐个添加每个属性值 properties.forEach(prop => { data.push({name: "properties[]", value: prop}); });
修改后,后端收到的$request->get('properties')会是["1","2"],此时$request->get('properties')[0]就能正常获取到"1"。
内容的提问来源于stack exchange,提问作者Hvel
相关产品推荐
相关产品推荐

