유사한 질문이 여기에서 해결됩니다. 다음 솔루션을 사용하여 jQuery를 사용하여 양식 데이터를 JavaScript 객체로 변환 합니다.
$.fn.serializeObject = function()
{
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name] !== undefined) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
그러나 중첩 된 개체가있는 JSON을 사용하려는 경우에는 작동하지 않습니다. 예를 들어,이 양식의 경우 :
Employee name: <input type="text" id="employee" name="name"/>
Department name: <input type="text" id="department" name="department.name"/>
Department chief1: <input type="text" id="chief1" name="department.chief[0]"/>
Department chief2: <input type="text" id="chief2" name="department.chief[1]"/>
나는 얻고있다: {"name":"John","department.name":"IT" , "department.chief[0]":"Mike" "department.chief[1]":"Lucas"}
하지만 내가 필요한 것은 {"name":"John","department" : {"name":"IT"}, "chief" : [ "Mike", "Lucas" }
이런 식으로 수행하는 serializeObject의 적응이 있습니까?
몇 가지 배경 정보를 제공하려면 Spring MVC 컨트롤러에 AJAX 호출을 제출하고 Jackson이 해당 형식이 중첩 된 객체를 생성하기를 기대하기 때문에 이것이 필요합니다.
이것은 중첩 된 개체와 배열을 모두 지원하는 serializeObject의 수정 된 버전입니다.
$.fn.serializeObject = function() {
var arrayData, objectData;
arrayData = this.serializeArray();
objectData = {};
$.each(arrayData, function() {
this.value = !this.value ? '' : this.value;
processObject(objectData, this.name, this.value);
});
return objectData;
};
function processObject(obj, key, value){
if(key.indexOf('.') != -1) {
var attrs = key.split('.');
var tx = obj;
for (var i = 0; i < attrs.length - 1; i++) {
var isArray = attrs[i].indexOf('[') != -1;
var isNestedArray = isArray && (i != attrs.length-1);
var nestedArrayIndex = null;
if(isArray){
nestedArrayIndex = attrs[i].substring(attrs[i].indexOf('[') +1 , attrs[i].indexOf(']'));
attrs[i] = attrs[i].substring(0, attrs[i].indexOf('['));
if (tx[attrs[i]] == undefined){
tx[attrs[i]] = [];
}
tx = tx[attrs[i]];
if(isNestedArray){
if(tx[nestedArrayIndex] == undefined){
tx[nestedArrayIndex] = {};
}
tx = tx[nestedArrayIndex];
}
}else{
if (tx[attrs[i]] == undefined){
tx[attrs[i]] = {};
}
tx = tx[attrs[i]];
}
}
processObject(tx, attrs[attrs.length - 1], value);
}else{
var finalArrayIndex = null;
if(key.indexOf('[') != -1){
finalArrayIndex = key.substring(key.indexOf('[') +1 , key.indexOf(']'));
key = key.substring(0, key.indexOf('['));
}
if(finalArrayIndex == null){
obj[key] = value;
}else{
if(obj[key] == undefined){
obj[key] = [];
}
obj[key][finalArrayIndex] = value;
}
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다