Jquery 在不知道表单的长度的情况下发布表单中的数据
我需要使用jQuery发布一些表单数据,字段输入值需要以JSON格式发布。问题是表单字段由肯定会出现的字段组成,比如:名字、姓氏和电子邮件,但是后面的字段可以是任意数字,因为表单是根据GET请求构建的。所以通常我会这样做:Jquery 在不知道表单的长度的情况下发布表单中的数据,jquery,json,ajax,forms,Jquery,Json,Ajax,Forms,我需要使用jQuery发布一些表单数据,字段输入值需要以JSON格式发布。问题是表单字段由肯定会出现的字段组成,比如:名字、姓氏和电子邮件,但是后面的字段可以是任意数字,因为表单是根据GET请求构建的。所以通常我会这样做: var firstName = $('input[name="firstName"]').val(); var lastName = $('input[name="lastName"]').val(); var email = $('input[name="email"]')
var firstName = $('input[name="firstName"]').val();
var lastName = $('input[name="lastName"]').val();
var email = $('input[name="email"]').val();
data: JSON.stringify({
"firstName": firstName,
"lastName": lastName,
"email": email
})
然而,这对我剩下的字段不起作用。理想情况下,我需要像一个each函数或一些东西一样循环其他问题,并将这个循环放到JSON.stringify中,但我不知道如何做到这一点。但你可能会说,为什么不使用:
$('form').serialize();
只获取所有表单数据,但问题是JSON需要采用以下格式
{
"firstName": "string",
"lastName": "string",
"email": "string",
"responses": [
{
"questionKey": 0, //this needs to be the ID of the input
"responseText": "string", //this needs to the value of the input
} //with this part of the JSON repeating for each question
]
}
所有这些附加字段都具有相同的输入类,因此我可以在jQuery中轻松地使用它们。我真的被困住了,我非常感谢你的帮助。谢谢:)
更新-以下是表单字段的示例:
<input name="firstName" id="firstName" type="text" class="known-questions">
<input name="lastName" id="lastName" type="text" class="known-questions">
<input name="email" id="email" type="email" class="known-questions">
<input name="45435345345" id="45435345345" type="text" class="unknown-questions">
<input name="43443539864" id="43443539864" type="text" class="unknown-questions">
<input name="43344243529" id="43344243529" type="text" class="unknown-questions"> //there could be any number of these 'unknown-questions' class inputs
//这些“未知问题”可以是任意数量的课堂输入
您已经说过,对于响应
数组,每个带有响应的输入元素将共享一个类。尝试每个循环,假设未知问题为该类名:
var responsesArray = [];
$(".unknown-questions")
.each(function(idx, obj)
{
responsesArray.push(
{
"questionKey" : obj.id,
"responseText" : $(obj).val()
});
});
您还说过要使用jQuery发送表单数据。不清楚您是想获取还是发布,或者是否将使用jQuery AJAX函数,但我使用jQuery.GET
调用测试了上述功能,如下所示:
$.get("https://httpbin.org/get",
{
"firstName" : firstName,
"lastName" : lastName,
"email" : email,
"responses" : responsesArray
});
但我不确定这是你想要的。如果您想要一个JSON字符串来捕获可以作为单个参数发送的对象,那么:
var jsonString =
JSON.stringify(
{
"firstName" : firstName,
"lastName" : lastName,
"email" : email,
"responses" : responsesArray
});
生成以下JSON结构(我插入了换行符并编写了示例表单字段和值):
已序列化为所需结构的完整表单:
var data ={};
$('.known-questions').each(function(){
data[this.name] = this.value;
});
data.responses = $('.unknown-questions').map(function(){
return {questionKey: this.id, responseText:this.value};
}).get();
var postJson = JSON.stringify(data);
为什么不使用对象数组?了解生成的html结构会有很大帮助。这样就不难遍历元素并基于名称或其他相关属性添加属性/值。对于已知字段,可以简化为这些名称的数组,并循环该数组以设置属性/值,而无需全部写出manually@SimonSchüpbach不是一组对象的预期结果吗?OP正在试图找出如何创建这些对象。SBTW。serialize()
不会生成JSON@Musa你是对的,我应该对此进行扩展,告诉你我将如何将其转换为JSONSimilar for已知问题
将简化手动将其添加到主对象的过程感谢pb2q,通过将数据推送到数组中,我看到了您在做什么。那么这是如何与我的名字、姓氏和电子邮件字段JSON进行交互的呢?JSON类似:{“firstName”:firstName,“lastName”:lastName,“Email”:Email}并确保它位于JSON的正确级别上?@user1190132我将添加一个$。获取
示例简短感谢pb2q这也回答了我的问题。我很感激你派来帮助我的时间,我仍然在学习新的东西techniques@user1190132很乐意帮忙。charlietfl的答案当然更完整/简洁。现在,非常感谢您,这真的很有帮助,我也感谢您制作演示
var data ={};
$('.known-questions').each(function(){
data[this.name] = this.value;
});
data.responses = $('.unknown-questions').map(function(){
return {questionKey: this.id, responseText:this.value};
}).get();
var postJson = JSON.stringify(data);