javascript - 通过 HTML 表单将 javascript 数组传递到另一个 js 文件

标签 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
}); 
$('.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 参数访问它时,我收到“意外的 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 - 到目前为止我们都很好(嵌套 Array 没有问题)。

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

第二个问题是 .answers 不属于 varanswers,因为它是一个 Array。它是数组元素的属性。解决方案:让我们取第一个数组元素 varanswers = 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”数组中有多个问题怎么办,您打算一次将它们全部发布吗?如果是,则应该涉及某种循环,以便获得正确的答案 (varanswers = questions[0].answers => questions[i].answers)

关于javascript - 通过 HTML 表单将 javascript 数组传递到另一个 js 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35192649/

相关文章:

javascript - jquery-1.4.1.min.js 和 jquery-1.4.1.js 之间的区别

javascript - 将对象文字插入数组(重复本身..)

javascript - 为什么 jQuery 不能在已发布的网站上运行?

javascript - Onblur 事件在另一个 div 的 onclick 之前触发

javascript - 如何在 html js 中制作可滚动的 Canvas 图像?

ios - 为 Homescreen 的 HTML5 应用程序连接 Cookies?

javascript - 从基本 Slider jquery 获取值

javascript - HTML/CSS : Set width & height of object in a div?

node.js - Azure Node SDK可获得超过50个虚拟机

node.js - 尝试在我的项目文件夹中创建新目录时出现错误