我正在做一个小测验来学习javascript(jquery)并且我已经开始了。之前,我只用了一个对象来存储所有问题。我已经"字符串化"此对象为JSON格式,我使用此代码检索它:
var question;
$.getJSON('package.json', function(data) {
$.each(data, function(key, value){
question = value[currentQuestion].question;
var choices = value[currentQuestion].choices;
var correctAnswer = value[currentQuestion].correctAnswer;
var indexAnswer = value[currentQuestion].choices[correctAnswer];
});
});
问题是我不能在每个方法中使用全局变量问题来分配全局"范围" (它说未定义)。 JSON通常用于将所有信息直接添加到dom中,但我依赖于currentQuestion数字,这让我很困惑。
之前我使用过此代码:
$questions.each(function (index) {
var choices = allQuestions[currentQuestion].choices[index];
$(this).next().text(choices);
});
其中我使用动态currentQuestion编号静态添加每个问题。
我有点失去了这个测验的最佳策略,因为我希望动态添加答案(我不再希望这个在我的HTML中了。
<input name="group1" value="answer1" type="radio"/><span></span><br>
<input name="group1" value="answer2" type="radio"/><span></span><br>
<input name="group1" value="answer3" type="radio"/><span></span><br>
<input name="group1" value="answer4" type="radio"/><span></span><br>.
我不希望你为我编码,我只是想要一些关于我需要做什么工作的指示/提示。主要问题是如何以这样的方式使用JSON和jQuery,它可以动态地将问题添加到测验中。
答案 0 :(得分:0)
使用foreach-loop循环遍历json-object。 在这个循环中,你会在每次迭代时覆盖问题变量,这看起来毫无意义。
除此之外:“undefined”可能不是关于问题变量,而是关于currentQuestion变量。 currentQuestion变量是未定义的,应该是键。
或者您可以将$ .each行更改为以下内容:
$.each(data, function(currentQuestion, value){
我认为这会(部分)修复你的代码
答案 1 :(得分:0)
我自己修理了这个:
function getJson(url) {
return JSON.parse($.ajax({
type: 'GET',
url: 'package.json',
dataType: 'json',
global: false,
async:false,
success: function(data) {
return data;
}
}).responseText);
}
var myJsonObj = getJson('myjsonurl');
var allQuestions = myJsonObj.allQuestions;
现在整个JSON文件已自动转换为javascript ojbect,我将其分配给AllQuestions变量。我不需要AJAX调用是异步的,因为在用户会话期间数据永远不会改变。