所以我有一个测试应用程序,它与MongoDB服务器上的API通信。
我想像这样访问它的响应索引:
setTimeout(() => {
axios.get('/api/ninjas')
.then(function (questions) {
var data = questions.data;
$.each(data, function(index, value) {
/*thequestion = [
new Question(value.the_question[index], value.the_choices[index], value.the_answer[index])
]*/
console.log(value[index].the_question);
quiz = new Quiz(thequestion)
populate()
})
}), 2000});
但我得到Uncaught (in promise) TypeError: Cannot read property 'the_question' of undefined
如果我删除了[index]
,那么我会在控制台中输出问题文本。我也尝试将[index]
放在最后console.log(value.the_question[index]);
,但接下来我只是在屏幕上看到一个字母。
所以基本上我的MongoDB集合中有两个对象。每个包含the_question字符串,the_choices数组和the_answer字符串。我想在屏幕上一次输出一个问题及其答案选项,但是当我重新加载页面时,我只得到数据库集合中的最后一个问题,并且所有答案选择一次堆叠在一起,即使是应该每个问题不超过3个按钮。当DB中只有一个问题时,它可以正常工作。
DB中的一个问题:
数据库收集中的多个问题:
所以我想使用索引一次输出一个问题,但是在使用它时会出错。怎么了?
我必须提到它工作正常我没有使用DB这个。只是javascript中的全局变量。像这样,我一次得到一个问题
let thequestion = [
new Question("Which one of the three is a programming language?", ["Javascript", "HTML", "CSS"], "Javascript"),
new Question("Is NodeJS is a front end or back end framework?", ["Back end", "Front End"], "Back end"),
new Question("Is JAVA object oriented language?", ["Yes", "No"], "Yes")
]
我的数据库看起来像这样:
编辑:整个前端源代码:
答案 0 :(得分:1)
您可以尝试以下操作,如果这不起作用,请使用控制台日志的输出更新您的问题,以便我们查看您的API收到的问题的格式?
setTimeout(() => {
axios.get('/api/ninjas')
.then(function (questions) {
console.log(
"received questions:"
,JSON.stringify(questions,undefined,2)
);
quiz = new Quiz(//create a quiz
(questions.data || [])//map question data to Question type
.map(
function (question) {
return new Question(
question.the_question,
question.the_choices,
question.the_answer
);
}
)
);
populate()
})
, 2000
});
你为什么要等2秒才能获得数据?如果这是在页面加载,那么你可以尝试$(document).ready
,但我不认为你必须等待文件准备开始提取问题(可能只填充):
$(document).ready(x=>populate());