jQuery序列化多个表单并作为JSON发送
jQuery serialize multiple forms and send as JSON
>我在一个页面上有多个表单,每个表单都会将单个项目添加到数据库中。还有一个"全部添加"按钮,将发送所有产品数据。请参阅下面的基本 html:
<button type="submit">All all products</a>
<form>
<input type="hidden" name="Product" value="ProductA" />
<input type="checkbox" name="optionAll" value="Option All" /> Option All
<input type="checkbox" name="option" value="Option 1" checked="checked" /> Option 1
<input type="checkbox" name="option" value="Option 2" /> Option 2
<button type="submit">Add this product"</button>
</form>
<form>
<input type="hidden" name="Product" value="ProductB" />
<input type="checkbox" name="optionAll" value="Option All" /> Option All
<input type="checkbox" name="option" value="Option 1" checked="checked" /> Option 1
<input type="checkbox" name="option" value="Option 2" checked="checked" /> Option 2
<button type="submit">Add this product"</button>
</form>
我正在尝试将序列化的表单数据发布为以下 JSON 格式:
products = {
"ProductA": {
"option": ["Option 1"] // only 1 checkbox is checked
},
"ProductB": {
"optionAll": "Option All",
"option": ["Option 1", "Option 2"] // both checkboxes are checked
}
}
我一直在尝试映射序列化数据,但无法将其转换为上述 JSON 格式。
data = $.map($('form').serializeArray(), function(el, i){
var json = {};
???
return json;
});
console.log(data)
感谢您的帮助!
var result = {}; // object to hold final result
$('button[type="submit"]').on('click', function() {
$('form').each(function() { // loop start for each form
var sr = $(this).serializeArray(),
options = [];
result[sr[0].value] = {}; // insert Product value and initiate it as object
$.each(sr, function() { // loop start for each checkbox
if(this.name == 'option') {
options.push(this.value);
}
});
// if all checkbox are checked then insert the property optionAll
if(options.length == $('input[type="checkbox"][name="option"]',this).length) {
result[sr[0].value].optionAll = 'Option All';
}
result[sr[0].value].option = options;
});
console.log(result);
});
要将 javascript 对象序列化为 JSON 字符串,只需使用
JSON.stringify(myobject)
所以你的工作主要是做对象:
var products = {
};
products['ProductA'] = $('input[name="Products"]').find(':checked').val();
等等...
但是你真的应该改变一下你的html:你真的应该避免使用同名的输入。尝试至少给他们一个ID。
相关文章:
- 将日期时间作为 JSON 发送将无法在我的视图中正确显示
- 如何:浏览器将JSON发送到服务器
- 从Javascript for jqGrid通过JSON发送服务器端对象
- 解析将数据从 JSON 发送到 Django 时出错
- 如何使用 electron-json-storage 将 json 发送回 angular
- 如何使用ajax jquery获取表单字段值并将其作为json发送到服务器
- 为什么php找不到JSON发送的索引
- 将 json 发送到(不是 REST)WCF 服务
- Angularjs$http.post-将参数作为JSON发送到ASPXwebmethod
- 序列化方向结果到 JSON 发送到我的网络服务无法正常工作
- 使用 $.post 将基本 JSON 发送到 php,并带有回调
- 有没有办法使用 XMLHttpRequest() 将 json 发送到远程 cfc
- 如何通过Postman将JSON发送到NodeJS Express Server
- 如何在java中解码由javascript使用readAsDataURL()生成并由Json发送的字符串
- 将 JSON 发送到 Google App Engine Datastore
- jQuery序列化多个表单并作为JSON发送
- 使用 JSON 发送电子邮件
- Angularjs 将空的 JSON 发送到服务器(仅在 IE 9 及更高版本中)
- 在通过json发送unix时间戳之前进行转换
- 如何使用jqGrid将JSON发送到服务器