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

最近项目中用到需要将前台的数组传递到后台进行更新数据库,但对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 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 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 lists=JSONArray.toList(jArray, DataDict.class);//将json集合jArray放入list集合中,
 DataDict.class是数据对应的对象
       for(int i=0;ithis.setDataDict(lists.get(i));//将数据放入对象
              dataManager.saveDataDict(dataDict);//调用service操作数据库
          }
         Struts2Utils.renderJson("success");
        return null;
    }

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

你可能感兴趣的:(json)