通过 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
)
我的 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
)