通过HTML表单将javascript数组传递给另一个js文件
我的html中有这个javascript代码通过HTML表单将javascript数组传递给另一个js文件,javascript,html,node.js,forms,associative-array,Javascript,Html,Node.js,Forms,Associative Array,我的html中有这个javascript代码 answers.push({ answer:$('#answer_1').val(), correctAnswer:$('#choice_1').is(":checked") }); questions.push({ questionNumber:1, questionType:questionType, questionText:questionText, answers:answers });
answers.push({
answer:$('#answer_1').val(),
correctAnswer:$('#choice_1').is(":checked")
});
questions.push({
questionNumber:1,
questionType:questionType,
questionText:questionText,
answers:answers
});
$('.hiddenField').val(JSON.stringify(questions));
如你所见,我在问题数组中有答案数组。我想将这个问题数组传递给服务器端javascript文件。我试图在HTML表单的POST方法中使用一个隐藏的输入,如下所示
<form action="/new" method="POST">
<div class = "quiz_basic">
<input type = "hidden" class = "hiddenField" name = "questions" />
</div> </form>
如果我从questions数组中删除answers数组对象并通过HTMLPOST方法仅传递该对象,我就能够毫无问题地解析它。我应该如何通过HTML发送一个包含另一个数组作为其元素之一作为一个对象的数组?你们能帮帮我吗
json看起来像这样
[{"questionNumber":1,"questionType":"radio","questionText":"Whats your name","answers":[{"answer":"Peter","correctAnswer":true},{"answer":"Dave","correctAnswer":false},{"answer":"Adam","correctAnswer":false},{"answer":"Steve","correctAnswer":false}]}]
如上所述,如果我删除“answers”数组并发送它,它不会在服务器端抛出错误
谢谢当您解析它时,您拥有有效的JSON字符串
var questions=JSON.parse(req.body.questions)
您可以获得对象的数组
——到目前为止我们做得很好(嵌套的数组
没有问题)
当您尝试解析var answers=JSON.parse(req.body.questions.answers)时,第一个问题就开始了代码>req.body.questions
此时是一个字符串,无法访问属性。答案。解决方案:不要第二次解析,让我们使用已经解析的var-questions
第二个问题是.answers
不属于var answers
,因为它是数组。它是数组元素的属性。解决方案:让我们取第一个数组元素var answers=questions[0]代码>
尝试这样做:
router.post('/new', function(req, res, next){
var questions = JSON.parse(req.body.questions);
console.log('Question array is ', questions);
var answers = questions[0].answers;
console.log('Answer array is ', answers);
res.send('success');
}
这修复了解析问题,但不确定初始JSON结构是否正确。。如果“问题”数组中有多个问题,您是否打算一次发布所有问题?如果是,则应该涉及某种循环,以便访问正确的答案(var answers=questions[0]。答案
=>questions[i]。答案
)解析时,您拥有有效的JSON字符串var questions=JSON.parse(req.body.questions)
您可以获得对象的数组
——到目前为止我们做得很好(嵌套的数组
没有问题)
当您尝试解析var answers=JSON.parse(req.body.questions.answers)时,第一个问题就开始了代码>req.body.questions
此时是一个字符串,无法访问属性。答案。解决方案:不要第二次解析,让我们使用已经解析的var-questions
第二个问题是.answers
不属于var answers
,因为它是数组。它是数组元素的属性。解决方案:让我们取第一个数组元素var answers=questions[0]代码>
尝试这样做:
router.post('/new', function(req, res, next){
var questions = JSON.parse(req.body.questions);
console.log('Question array is ', questions);
var answers = questions[0].answers;
console.log('Answer array is ', answers);
res.send('success');
}
这修复了解析问题,但不确定初始JSON结构是否正确。。如果“问题”数组中有多个问题,您是否打算一次发布所有问题?如果是,则应涉及某种循环,以便访问正确的答案(var answers=questions[0]。答案
=>questions[i]。答案
)请修复HMTL格式:代码>您可以编写完整的错误堆栈跟踪吗?您可以通过AJAX(XmlHttpRequest)向服务器提交JS数组和对象。有很多方便的包装,例如在jQuery中。你能发布关于json看起来怎么样的问题吗?编辑了我的文章,提供了更多细节。添加了questions.json格式的htmlPlease修复您的HMTL格式:代码>您可以编写完整的错误堆栈跟踪吗?您可以通过AJAX(XmlHttpRequest)向服务器提交JS数组和对象。有很多方便的包装,例如在jQuery中。你能发布关于json看起来怎么样的问题吗?编辑了我的文章,提供了更多细节。添加了questions.json,格式为htmlYes,先生。非常感谢你。关于我的json,你是对的。我会有不止一个问题,所有问题都会立即提交。我使用Mongo db来保存这些问题,我循环使用问题数组长度,并能够将其与相应的答案数组一起保存。像这样,如果我遗漏了什么,或者您对如何更好地完成它有任何意见,请告诉我。var questions=JSON.parse(req.body.questions);对于(i=0;i