如何从json文件中测试数据

时间:2014-09-23 10:43:04

标签: jquery json

我正在做一个小测验来学习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,它可以动态地将问题添加到测验中。

2 个答案:

答案 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调用是异步的,因为在用户会话期间数据永远不会改变。