2010-08-11 54 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; 
    } 
    } 
}; 
相關問題