通过 HTML 形式将 javascript 数组传递给另一个 js 文件

Passing a javascript array through HTML form to another js file

我的 html 中有这个 javascript 代码。

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>

在服务器端 js 文件中,当我尝试使用 req.body.questions 参数访问它时,出现 "unexpected token u" 错误。这是我的服务器端代码。我正在使用 nodejs 框架。

    router.post('/new', function(req, res, next){
    var questions = JSON.parse(req.body.questions);
    console.log('Question array is ', questions);
    var answers = JSON.parse(req.body.questions.answers);
    console.log('Answer array is ', answers);
  res.send('success');
}

如果我从问题数组中删除答案数组对象并仅通过 HTML POST 方法传递它,我可以毫无问题地解析它。我应该如何通过 HTML 发送一个包含另一个数组作为其元素之一的数组作为一个对象?你们能帮帮我吗?

questions.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); 你会得到 Array 个对象 - 到目前为止我们都很好(嵌套 [=12= 没有问题]).

第一个问题在您尝试解析 var answers = JSON.parse(req.body.questions.answers); 时开始。 req.body.questions此时是一个String,属性 .answers无法访问。解决方案:不要第二次解析,让我们使用已经解析过的var questions

第二个问题是 .answers 不属于 var answers,因为它是 Array。它是数组 个元素 的 属性。解决方案:让我们取第一个数组元素 var answers = questions[0].answers;

尝试这样做:

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 结构是否正确。如果 'questions' 数组中有多个问题,您是否要 post 全部在一次?如果是,那么应该涉及某种循环,以便获得正确的答案 (var answers = questions[0].answers => questions[i].answers)