无法从jQuery ajax调用中分配responseText

时间:2016-02-01 22:33:08

标签: jquery ajax

我一直在研究一个简单的测试提供者应用程序。使用嵌入代码中的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。我似乎根本无法进入成功功能,因为当我通过断点进入它时,它会越过成功选项并返回。我甚至试图做一个警报(结果)没有成功(没有双关语)。

任何见解都将受到最高的赞赏。

1 个答案:

答案 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);
});

您可能会发现这种方法不再需要所有问题都是全局的 - 所有相关的函数都会将它们相互传递。