2010-08-11 53 views
0

我尝试使用jquery + json获取表单中的所有元素,并构建一个JSON var以在ASP.NET MVC方法中发布。我怎样才能让JSON子节点(JSON内的JSON)?

$.fn.serializeObject = function() { 
    var o = {}; 
    var a = this.serializeArray(); 
    $.each(a, function() { 
    if (o[this.name]) { 
    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; 
}; 


$("#btnPost").click(function() { 
    alert(JSON.stringify($("#frm").serializeObject()))); 
}); 

该方法获取表单中的所有字段并构建一个JSON,但它不把JSON放入JSON中。

例子:

,如果我有如下形式:

<input name="person.name"><input name="person.age"><input name="person.address.street"> 

序列化的字符串构建一个JSON这样

{ "person.name": "??", "person.age": "??", "person.address.street": "??" } 

我需要一个插件或一些功能来产生这样的:

{ "person": { "name" : "??", "age" : "??", "address":{ "street": "??" } } } 

回答

1

你的问题不是“JSON内的JSON”(无论如何这是一个误称--JSON支持嵌套就好),你的问题是你误解了这个过程是如何工作的。

serializeObject()方法,光看名字 - 作为字符串没有什么在JavaScript,使这一进程“自动地”解决点符号为您 - 期间只是当作属性名称的一部分。

您需要拆分期间的名称并相应地继续。递归的一点点,你在那里。

$.fn.serializeObject = function() 
{ 
    var o = {}; 
    var a = this.serializeArray(); 
    $.each(a, function() 
    { 
    if (/\./.test(this.name)) 
    { 
     resolveProperty(o, this.name.split('.'), this.value);        
    } else { 
     o[this.name] = this.value; 
    } 
    }); 
    return o; 

    function resolveProperty(object, properties, value) 
    { 
    if (properties.length > 1) 
    { 
     var property = properties.shift(); 

     if ('undefined' == typeof object[property]) 
     { 
     object[property] = {}; 
     } 
     resolveProperty(object[property], properties, value); 
    } else { 
     object[properties.shift()] = value; 
    } 
    } 
}; 
相关问题