程序开发中,遇到了ajax传递多种数据类型,踩了很多坑,特总结回馈给大家,需求是ajax需要传递多条list和一个字符串两种数据类型
//批量保存
function save() {
var mparentcode=$(" input[ name='mparentcode' ] ").val();
var mfunccode=$(" input[ name='mfunccode' ] ").val();
var mfuncname=$(" input[ name='mfuncname' ] ").val();
//var mleaf=$(" input[ name='mleaf' ] ").val();
var mleaf = $("#mleaf").val();
var mindexid=$(" input[ name='mindexid' ] ").val();
var mlevelcode=$(" input[ name='mlevelcode' ] ").val();
var murl=$(" input[ name='murl' ] ").val();
var mremark=$(" input[ name='mremark' ] ").val();
var mobj ={
parentcode:mparentcode,
funccode:mfunccode,
funcname:mfuncname,
leaf:mleaf,
indexid:mindexid,
levelcode:mlevelcode,
url:murl,
remark:mremark
};
var productArray = new Array();
productArray.push(mobj);
var tb = document.getElementById('detail_editable_1'); // table 的 id
var rows = tb.rows; // 获取表格所有行
for(var i = 1; i<rows.length; i++ ){
var obj = {};
for(var j = 0; j<rows[i].cells.length; j++ ){ // 遍历该行的 td
obj[$(rows[i].cells[j]).children().attr('name')]= $(rows[i].cells[j]).children().val();
}
productArray.push(obj);
}
在前台将list封装成一个个对象放入数组中,通过JSON.stringify方法把对象序列成json字符串
后台使用Map<String, Object>进行接收,可以看到后台已经取到数据,分别用实体类list和String进行获取,便可以处理数据。
public boolean saveVdSystemMenuTreeList(String parentId,List<MenuTree> list) {
// 根据ID删除数据
/*JSONObject jsonObject=JSONObject.fromObject(list); // 将数据转成json字符串
MenuTree per = (MenuTree)JSONObject.toBean(jsonObject, MenuTree.class); //将json转成需要的对象
*/
if(StringUtils.isNotEmpty(parentId)){
MenuTreeMapper.deleteByParentId(parentId);
MenuTreeMapper.deleteById(parentId);
// 批量添加菜单树列表
for(Object obj : list){
JSONObject jsonObject=JSONObject.fromObject(obj); // 将数据转成json字符串
MenuTree per = (MenuTree)JSONObject.toBean(jsonObject, MenuTree.class); //将json转成需要的对象
int key = MenuTreeMapper.insertSelective(per);
if(key <= 0){
return false;
}
}
}
else{
return false;
}
return true;
}