私は次のJSONを持っています:
var questions = {
section: {
"1": question: {
"1": {
"id" : "1a",
"title": "This is question1a"
},
"2": {
"id" : "1b",
"title": "This is question2a"
}
},
"2": question: {
"1": {
"id" : "2a",
"title": "This is question1a"
},
"2": {
"id" : "2b",
"title": "This is question2a"
}
}
}
};
注:元のJSONの形式が正しくないため、JSONは以下の回答に基づいて変更され、質問をより適切にサポートし、以下のforループでどのように機能するかを示しています。
完全なJSONには8つのセクションがあり、各セクションには15の質問が含まれます。
アイデアは、JSコードがどのセクションを引き出すかを読み取り、リストから質問を1つずつ引き出すというものです。最初のロード時に最初の質問が引き出され、ユーザーがオプションAまたはBのいずれかのボタンをクリックすると、すべての質問が引き出されるまで次の質問がロードされ、コールバックが実行されます。
追加されたリスト項目のボタンをクリックすると、ユーザーがスパンタグとして提供した回答とともに、応答と呼ばれる以下のリストに追加されます。
これは私がこれまでに持っているものです:
function loadQuestion( $section ) {
$.getJSON('questions.json', function (data) {
for (var i = 0; i < data.length; i++) {
var item = data[i];
if (item === $section) {
$('#questions').append('<li id="' + item.section.questions.question.id + '">' + item.section.questions.question.title + ' <button class="btn" data-response="a">A</button><button class="btn" data-response="b">B</button></li>');
}
}
});
}
function addResponse( $id, $title, $response ) {
$('#responses').append('<li id="'+$id+'">'+$title+' <span>'+$response+'</span></li>');
}
$(document).ready(function() {
// should load the first question from the passed section
loadQuestion( $('.section').data('section') );
// add the response to the list and then load in the next question
$('button.btn').live('click', function() {
$id = $(this).parents('li').attr('id');
$title = $(this).parents('li').html();
$response = $(this).data('response');
addResponse( $id, $title, $response );
loadQuestion ( $('.section').data('section') );
});
});
およびページのHTML(各ページは個別のHTMLページです):
<div class="section" data-section="1">
<ul id="questions"></ul>
<ul id="responses"></ul>
</div>
セクションから最初の質問のみを取得し、すべてが呼び出されるまでそのセクションの各質問を連続してロードし、コールバックを実行してセクションが完了したことを示す方法に行き詰まり、混乱しました。
ありがとう