jQuery.Deferred 异常(AJAX、JSON 数组对象)

jQuery.Deferred exception (AJAX, JSON Array Object)

我的第一个函数通过 jQuery AJAX 请求获得一个 JSON 数组对象。 我的第二个函数尝试访问该对象,但被 "jQuery.Deferred exception: Unable to get property '1' of undefined or null reference..." 击中(注意“1”是指我尝试访问 oJSON[1].name,如以下代码所示。)

这是我的 JSON:

[{"name":"Alpha", "numWalks":1},{"name":"Beta","numWalks":2}]

这是我的代码:(注意:由于我的 SharePoint 网站的设置方式,我必须将 JSON 保存为 .txt 文件并将其解析为 JSON。)

var oJSON;
$("document").ready(function() {
  getText().done(getDogs());
});

function getText() {
  var deferred = $.Deferred();
  $.get("dogWalksJSON.txt", function(returnedText) {
    oJSON = JSON.parse(returnedText);
  });
  deferred.resolve();
  return deferred.promise();
}

function getDogs() {
  console.log(oJSON[1].name);
}

如果我在 getText() 函数中 console.log(oJSON[1].name),它就可以工作。但是当我尝试从 getDogs() 函数访问该信息时,出现异常。我的猜测是它试图在信息准备好之前访问它(如果我尝试从浏览器的控制台访问它,它会起作用),这就是我添加 defer/promise.

的原因

有人对我如何解决这个问题有任何建议吗?

谢谢!

My guess is that it's trying to access the info before it's ready

确实如此。您调用 deferred.resolve 太早了,您立即调用 getDogs() 而不是将其传递给 then。

避免使用 deferred antipattern 和全局 oJSON 变量,使用

$("document").ready(function() {
  getText().then(getDogs  );
//                      ^^ no call
});

function getText() {
  return $.get("dogWalksJSON.txt")
  .then(function(returnedText) { // chain the promise
    return JSON.parse(returnedText); // fulfill it with the parsed object
  });
}

function getDogs(oJSON) {
  console.log(oJSON[1].name);
}