jqGrid多选复选框选中值存数组插入MySQL数据库报错解决方案问询
问题根源
你遇到的两个报错均为用法错误导致:
JSON.parse(arry)报错:JSON.parse()仅支持解析合法JSON格式字符串,你传入的是原生JS数组,数组自动toString后多元素会携带逗号,不符合JSON格式规则,因此多选时报错,仅单选时纯字符串格式刚好符合要求可侥幸运行。- SQL语法报错:你直接将序列化后的数组整体作为单条
empsl字段值塞入单条插入SQL,自然会把数组的[]、引号等符号带入SQL,触发语法错误。
前端代码修改
// 1. 勾选事件调整 objGrid.click(function(){ // 每次勾选先清空数组,避免多次操作累加重复数据 arry = []; var data = objGrid.jqGrid('getGridParam','selarrrow'); for(var i =0; i<data.length; i++) { empsl = objGrid.jqGrid('getCell', data[i], 'empno'); arry.push(empsl); } // 不需要做JSON转换,arry本身就是标准JS数组,直接用于提交即可 console.log(arry); }); // 2. 保存提交逻辑调整 buttons : { "저장":function() { console.log(typeof arry); console.log("insert data",arry); if (isRunning) { alert($.message.common.notification.wait); return; } isRunning = true; // 用ajax带traditional参数提交数组,避免jQuery自动给参数名加[]后缀 $.ajax({ url: "./CheckHoliday/addCheckHolidayData", type: "POST", traditional: true, data: {empsl: arry}, success: function(data){ if (data > 0) { alert("has been saved."); closeDialogFunc(); CheckHolidayListRefresh(); } isRunning = false; }, error: function(){ isRunning = false; } }); } }
后端逻辑修改
核心是不要直接把接收的数组当成单个字段值插入,要适配批量插入逻辑:
- 后端接收前端传来的
empsl数组(如果前端传的是JSON字符串,先解析为集合/数组类型) - 调整SQL为批量插入模式,示例(MyBatis语法):
INSERT INTO HRS_CHECKHOLIDAY (EMPNO, EMPSL, USEYN) VALUES <foreach collection="empslList" item="item" separator=","> (#{empno}, #{item}, 'Y') </foreach>
如果用其他后端语言,逻辑一致:遍历接收到的empsl集合,为每个元素生成一组插入值,用参数绑定的方式拼接SQL,避免直接字符串拼接带来的SQL注入风险和语法问题。
内容的提问来源于stack exchange,提问作者hongssi24
相关产品推荐
相关产品推荐

