js将json数组传递到后台及接收

这篇博客记录了如何在JavaScript中将修改后的JSON数组传递到后台进行数据库更新。使用EasyUI Datagrid,通过监听结束编辑事件,将修改的数据存入数组。在保存时,通过`JSON.stringify()`将数组转化为JSON字符串,以键值对形式通过Ajax提交。后台使用Java接收这些数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目中用到需要将前台的数组传递到后台进行更新数据库,但对json数组传递这一块实在是不太懂,在网上查了好久,终于解决了,现在写个备忘录,整理一下相关的东西。
首先,根据项目需求,对多行数据进行修改,修改后一起保存更新,而不是每修改一行就保存一行,这样就需要把表格中修改的数据放入数组,当点击保存时将数组提交到后台进行更新操作,
前台用的是easyui-datagrid
代码如下
datagrid有结束编辑事件:
onAfterEdit: function (rowIndex,rowData,changes) {//endEdit该方法触发此事件
editRow = undefined
arr=datagrid.datagrid('getChanges');

arr定义的数组,getChanges中放的是修改的行数据,当每结束一行的编辑时,将修改的行数据放入arr数组,
function save(arr){
alert("save:"+arr.length);
jsonarr=arr;
//拼json字符串,一开始用的这个,不过在后台不知道怎么取值,只好改成数组,这一段注释了
/* var jsonstr='[';
for(var i=0;i<arr.length;i++){
jsonstr+='{';
jsonstr+='id:';
jsonstr+=arr[i].id;
jsonstr+=',code:';
jsonstr+=arr[i].code;
jsonstr+=',name:';
jsonstr+=arr[i].name;
jsonstr+=',signs:';
jsonstr+=arr[i].signs;
jsonstr+=',types:';
jsonstr+=arr[i].types;
jsonstr+=',status:';
jsonstr+=arr[i].status;
jsonstr+='}';
if(i<arr.length-1){
jsonstr+=',';
}
}
jsonstr+=']'; */
alert("jsonstr:"+jsonstr);
$.ajax({
url:'${ctx}/xtwh/datadict!save.action',
type:'post',
/* data:{'jsonstr':jsonstr}, */
data:{'jsonstr':JSON.stringify(jsonarr)//将数组转换成json字符串
},
dataType: "json",
success:function(data){
alert(data);
}
});

jsonarr是定义的全局变量
刚开始我是拼接的json字符串,但后来发现了更好更简洁的方法,在save方法中传入arr数组,可以直接调json的方法将数组转为json字符串如下
JSON.stringify(jsonarr)//将数组转换成json字符串
在ajax提交时,data在写时应以键值对的形式出现,(具体原因我也不太清楚,有知道的是大神可以留言解释下)
data:{‘jsonstr’:JSON.stringify(jsonarr);
后台java接收数据:

@Override
public String save() throws Exception {
     ogger.debug(jsonstr);
    JSONArray jArray=JSONArray.fromObject(jsonstr); //将传过来的json字符串放入json集合,
    System.out.println(jArray.size());
 List<DataDict> lists=JSONArray.toList(jArray, DataDict.class);//将json集合jArray放入list集合中,
 DataDict.class是数据对应的对象
       for(int i=0;i<lists.size();i++){
              this.setDataDict(lists.get(i));//将数据放入对象
              dataManager.saveDataDict(dataDict);//调用service操作数据库
          }
         Struts2Utils.renderJson("success");
        return null;
    }

暂时就总结这么多了,如有不对,请多多指点!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值