在开发中往往会将我们的一些用到对象的属性需要传到后台,而且对象还是多个,为了提高开发效率,故写一个公共的方法来将多个前台对象的属性传到后台。比如我这里有对象var p={"a":"aaa","b":"bbb","c":"ccc","array":ary},可能还有数组对象 var ary = [{"属性a":"123","属性b":"456","属性c":"789"},{"属性a":"123","属性b":"456","属性c":"789"},{"属性a":"123","属性b":"456","属性c":"789"}];
/**
* 组装请求jsonObj(把对应对象的所有属性组装到请求的sendObj中)
* @param sendObj 请求sendObj
* @param dtoObj 对应dto对象
* @param dtoName 对应后台Action dto的属性名称
*/
function concatSendObjByObj(sendObj,dtoObj,dtoName)
{
if (typeof dtoName == "undefined") {
for(var pro in dtoObj){
if(typeof(dtoObj[pro]) == "function"){
continue;
}
sendObj[pro] = dtoObj[pro];
}
} else {
for(var pro in dtoObj){
if(typeof(dtoObj[pro]) == "function"){
continue;
}
//判断此处对象是否为一个数组如果是的话我们调用下面组装数组的方法
if(dtoObj[pro]) instanceof Array)
{
concatSendObjByArray(sendObj,dtoObj[pro],dtoName+"."+pro);
}else
{
sendObj[dtoName+"."+pro] = dtoObj[pro];
}
}
}
}
/**
* 组装请求jsonObj(把对应循环域数组组装到请求的sendObj中)
* @param sendObj 请求sendObj
* @param objArray 对应循环域数组
* @param dtoName 对应后台Action 循环域数组dto的属性名称
*/
function concatSendObjByArray(sendObj,objArray,dtoName)
{
for(var i=0;i<objArray.length;i++)
{
var tempObj=objArray[i];
for(var p in tempObj)
{
if(typeof(tempObj[p])=="function")
{
continue;
}
if(p != "0")
{
sendObj[dtoName+"["+i+"]."+p]=tempObj[p];
}else
{
sendObj[dtoName+"["+i+"]"]=tempObj[p];
}
}
}
}
调用该方法concatSendObjByObj(senObj,p,"dtoName");console.log(senObj);
- dtoName.a:"aaa"
- dtoName.array[0].属性a:"123"
- dtoName.array[0].属性b:"456"
- dtoName.array[0].属性c:"789"
- dtoName.array[1].属性a:"123"
- dtoName.array[1].属性b:"456"
- dtoName.array[1].属性c:"789"
- dtoName.array[2].属性a:"123"
- dtoName.array[2].属性b:"456"
- dtoName.array[2].属性c:"789"
- dtoName.b:"bbb"
- dtoName.c:"ccc"
后台在全局或者方法里定义对应的类(别名dtoName)接受即可。