[英]Getting JSON from Form
我正在使用以下函數將表單代碼轉換為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;
};
現在它給我的結果為:[如果表單字段具有不同的名稱],並且表單字段名稱為direction1,direction2,direction3
{direction1: "abc", direction2: "xyz", direction3: "def"}
如果它們具有相同的名稱,請說出所有表單字段的address
:它將它們組合為:
Object {address: Array[3]} address: Array[3] 0: "dfddf" 1: "dfdfdf" 2: "fewwewe"length: 3
哪個是對的
我試圖得到的結果為:
{"address": "abc"},
{"address": "xyz"},
{"address": "def"}
我該如何進行更改
我被剝奪了睡眠,所以有更好的方法可以做到這一點,但是據我了解,這似乎可以滿足您的要求。 這將使每個數組成為{"objkey": valAtIndex }
形式的{"objkey": valAtIndex }
。 因此,在這種情況下, Object {address: Array[3]} address: Array[3] 0: "dfddf" 1: "dfdfdf" 2: "fewwewe"length: 3
將變為:
{"address":[
{"address": "dfddf"},
{"address": "dfdfdf"},
{"address": "fewwewe"}
]}
HTML
<form action="" id="form">
<input type="text" name='address' value='123' />
<input type="text" name='address' value='456' />
</form>
JS
$.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;
};
$(function() {
var t = $('#form').serializeObject();
Object.keys(t).forEach(function(key) {
if (t[key].constructor === Array) {
t[key].forEach(function(a, i) {
var obj = {};
obj[key] = a;
t[key][i] = obj;
});
}
});
var myAddresses = t["address"];
console.log(JSON.stringify(myAddresses, null, 4));
});
編輯:要訪問它們,請如上所述使用t["address"]
。 在運行代碼后查看控制台,您將看到:
[
{ "address": "123" },
{ "address": "456" }
]
編輯:刪除了令人困惑的“結果”部分。
看起來您只是在擴展對象,而不是根據需要創建數組。 無論您想要的是JSON類對象還是Array,如果要將它們作為單獨的對象,仍需要具有與每個對象相對應的鍵。 因此,代替:
o[this.name]=this.value
你需要
var obj={};
obj[this.name]=this.value;
然后:
o.push(obj);
要么:
o[a key of your definition]=obj;
這樣,您就可以根據需要在o
內提供單獨的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.