6

所以我有一个 JSON 文件,我需要从中获取测验问题。现在,我只是将问题作为对象存储在数组中。每个问题对象都有“文本”(问题本身)、“选择”(可能答案的数组)和“答案”(对应于正确答案选择位置的 int)。

如何检查我是否正确存储了问题对象?我想创建一个问题列表,我尝试用 questions[i].text 填充我的列表,但它没有用。我安装了 Firebug 来调试正在发生的事情,但我不完全确定如何充分利用它。

JSON 格式如下:

{
"text": "What does the author least like about Eclipse?", 
"choices": [
    "The plugin architecture.",
    "FindBugs.",
    "Refactoring.",
    "The Run As menu."],
"answer": 3
}

我的 JavaScript 文件:

$(document).ready(function(){

var questions=[];
$.getJSON('quiz.js',function(data){

     var i=0;
     for(i=0;i<data.length;i++){
        questions[i]=[String(data[i].text),String(data[i].choices),int(data[i].answer)];

    }

    var list = $('#list')
    $(questions).each(function(_, text) {
    var item = $('<li/>')
    var link = $('<a/>').html(text)
    link.click(function() { alert(text) })
    item.append(link)
    list.append(item)
    })

    $('#list').listview('refresh')


});
})

最后,一些HTML:

 <div data-role="content">
    <ul id="list" data-role="listview">
    </ul>
</div>

我知道这是一个很长的问题,但我非常感谢任何帮助。最终目标是拥有一个问题列表,单击该列表时,会显示答案选项并提供祝酒词以通知用户所选选项是否正确。如果回答正确,我还想以绿色突出显示列表中的问题,否则以红色突出显示。

编辑:

工作代码:

$(document).ready(function(){

$.getJSON('quiz.js',function(data){

var questions = data;
var list = $('#list')

$(questions).each(function(index, object) {

 $.each(object, function(key, value){

    if(key === 'text'){
        //do something with qustion

            var item = $('<li/>')
            var link = $('<a/>').html(value)
            link.click(function() { alert(value) })
            item.append(link)
            list.append(item)
            $('#list').listview('refresh')
        }

      });
    });

  });
});
4

4 回答 4

2

你用each错了。第二,你必须意识到你在 JSON 响应中得到了一个 Object of Objects。您需要遍历包含您的问题/答案数据的每个对象,并进一步遍历该问题/答案对象。此外,您有一个嵌套在该嵌套对象中的数组,并且需要遍历该数组以获取您的问题。看一些伪代码:

//will give you each object your data
$.each(data, function(key, object){

    //do something with my [Object, Object]
    $.each(object, function(key, value){

        if(key === 'text'){
            //do something with qustion
        }

        if(key === 'choices'){
            //loop over array
        }
    }
}
于 2013-10-25T14:35:17.987 回答
0

当你得到它时,你实际上是在迭代一系列选择吗?这是一个小提琴

你要么需要使用$.each在 jQuery 中找到的,要么如果你想要纯 javascript

for (property in object) {
  if (object.hasOwnProperty(property)) {
    // do stuff
  }
} 
于 2013-10-25T05:33:17.737 回答
0

据我所知: Thequestions是一个由几个元素组成的数组。这些元素依次是三个元素(文本、选择和答案)的数组。

您正在为each语句使用 jquery 选择器中的问题数组。

以下是做你想做的更好的方法:

$.each(questions, function (i, value) {
    var text = questions[i][0];
    var choice = questions[i][1];
    var answer = questions[i][2];
    var output='<li>'+text+'</li>';
    // rest of your code using text, choices and answers
});
于 2013-10-25T05:41:17.090 回答
0

尝试这个..

var ques=[];
$.getJSON('quiz.js',function(data){
for(var i in data)
{
var text =data[i].text;
var choic=data[i].choices;
var output='<li>'+text+'</li>';
}
$('#list').empty().append(output);
});
于 2013-10-25T04:52:49.160 回答