我一直在研究一个简单的测试提供者应用程序。使用嵌入代码中的JSON allQuestions对象,一切都运行良好。现在我想将allQuestions对象移出索引文件并移入test.json
并通过jQuery AJAX调用检索它。
我假设我需要将allQuestions保持为全局变量,因为我在脚本的其他位置操作它。
我得到一个" allQuestions是空错误"第一次在脚本中遇到它。
尝试将其声明为数组并且我得到了 allQuestions undefined 异常。这是嵌入了JSON的jsfiddle版本(对不起,我还没想到如何在jsfiddle中使用AJAX函数)。当我注释掉json并替换:
var allQuestions = null;
// jQuery AJAX request to read JSON formatted Test Questions & Answers from file
$.ajax({
url: "test.json",
dataType: "json",
success: function(result) {
allQuestions = result;
}
});
我通过firebug看到我得到了回复:
[{
question: ["Who is Prime Minister of the United Kingdom?", "Who is the Vice-President of the United
States?", "Who is Chancellor of Germany?", "Who is the Prime Minister of Canada?"],
choices: [
["David Cameron", "Gordon Brown", "Winston Churchill", "Tony Blair"],
["Barack Obama", "Bernie Sanders", "Nancy Pelosi", "Joe Biden"],
["Franz Ritz", "Angela Merkel", "Jan Schroeder", "John Stevens", "Karl Marx"],
["Wayne Gretsky", "Pierre Trudeau", "Mike Myers", "Justin Trudeau", "Justin Bieber"]
],
correctAnswer: [0, 3, 1, 3]
}]
但allQuestions为null。我似乎根本无法进入成功功能,因为当我通过断点进入它时,它会越过成功选项并返回。我甚至试图做一个警报(结果)没有成功(没有双关语)。
任何见解都将受到最高的赞赏。
答案 0 :(得分:0)
您可能缺少的部分是AJAX调用异步。
所以会发生什么:
- you initialize allQuestions
- you *start* requesting allQuestions to the server
- you render the page, and allQuestions is still NULL
- the server replies, but now it's too late.
那你做什么?您将渲染函数放在AJAX成功函数中:
$.post(..., function(reply) {
allQuestions = reply;
renderOnPage(allQuestions);
});
您可能会发现这种方法不再需要所有问题都是全局的 - 所有相关的函数都会将它们相互传递。