我需要从 form
中获取值,将其格式化为 JSON 并通过 AJAX 发布。这是我想要实现的格式:
{
items: [
{ id: 7, name: 'Book', price: 5.7 },
{ id: 5, name: 'Pencil', price: 2.5 }
]
}
这是 HTML:
(function($){
var $form = $('form');
// serializeArray format is way off from what I need
var rawData = $form.serializeArray();
console.log(rawData)
})(jQuery);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form>
<fieldset>
<h2>Product 1</h2>
<input type="hidden" name="items[0][id]" value="7">
<input type="text" name="items[0][name]" value="Book">
<input type="number" name="items[0][price]" value="5.7">
</fieldset>
<fieldset>
<h2>Product 2</h2>
<input type="hidden" name="items[1][id]" value="5">
<input type="text" name="items[1][name]" value="Pencil">
<input type="number" name="items[1][price]" value="2.5">
</fieldset>
</form>
我是否应该循环并使用正则表达式来解析 name
?还是有内置的方式?
我可以更改 <form>
需要时格式化。
最佳答案
这里不能使用默认的序列化,而是可以像这样手动序列化
(function($) {
var $fieldsets = $('form fieldset');
var items = $fieldsets.map(function(i, fs) {
var obj = {};
$(fs).find('input').each(function() {
obj[this.name.match(/\[([^\[]*)\]$/)[1]] = this.value;
});
return obj;
}).get();
var rawData = {
items: items
};
console.log(rawData)
})(jQuery);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form>
<fieldset>
<h2>Product 1</h2>
<input type="hidden" name="items[0][id]" value="7">
<input type="text" name="items[0][name]" value="Book">
<input type="number" name="items[0][price]" value="5.7">
</fieldset>
<fieldset>
<h2>Product 2</h2>
<input type="hidden" name="items[1][id]" value="5">
<input type="text" name="items[1][name]" value="Pencil">
<input type="number" name="items[1][price]" value="2.5">
</fieldset>
</form>
关于javascript - jQuery Form - 序列化为多维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39092532/