2010-10-19 44 views
1

壞值I與多個表單字段的設置..json2,得到jQuery中

<input type='text' id='Trait1' >0</input> 
<input type='text' id='Trait2' >1</input> 
<input type='text' id='Trait3' >2</input> 
<input type='text' id='Trait4' >3</input> 

(使用的數據僅僅是舉例)

當我使用

$.JSON.Stringify(form.serializeArray()); 

我得到的東西如..

[{'name','Trait1','value','0'}] 

這不能很好地轉換,因爲所有試圖從json反序列化的東西都將'name'和'value'視爲實際對象(其中'trait1'和'0'是實際對象)。

有什麼我可以做的嗎?

+0

你的HTML是無效的......和'serializeArray()'只考慮具有'name'屬性的輸入元素。它不是解決你的問題,但我認爲你應該知道。 – 2010-10-19 20:08:24

回答

3

在這篇博客文章請看:

http://www.foreachbit.com/2010_09_01_archive.html

或短,你可以使用這樣的事情來擺脫名稱和值:

var formVals = $('#MyForm').serializeArray(); 
    var jsonObj = {}; 

    for (i in formVals) 
    jsonObj[formVals[i].name] = formVals[i].value; 

    var submitVals = $.toJSON({ "MyFormData": jsonObj }); 

其中$ .toJSON是Stringify方法。

哦,哈曼是絕對正確的。在輸入中使用值屬性。

+0

使用'for ... in'來遍歷數組是非常危險的。 – Pointy 2010-10-19 20:07:47

+0

在上面的例子中,只有3個元素。但是,爲了安全起見,您可以隨時檢查formVals的.length屬性 – Dimskiy 2010-10-19 20:18:05

+0

您不知道數組可能從操作的Array.prototype對象繼承了什麼。在簡單的數組中使用'for ... in'通常被Javascript知道它是一個壞主意。 – Pointy 2010-10-19 20:23:56

1

<input type='text' id='Trait1' >0</input>輸入元素的使用不正確。嘗試<input type='text' id='Trait1' value='0'/>

0

那麼你可以自己翻譯一下:

$.JSON.Stringify($.each(form.serializeArray(), function(inp) { 
    var rv = {}; rv[inp.name] = inp.value; return rv; 
})); 
0

可以表單數據很容易地轉換成JSON字符串是這樣的:

allFormTags = $(document.yourFormName).serializeArray(); 

var myjson = {}; 
$.each(allFormTags, function() { 
    myjson[this.name] = this.value; 
})