【发布时间】:2018-01-04 17:13:31
【问题描述】:
我的第一个函数通过 jQuery AJAX 请求获取 JSON 数组对象。 我的第二个函数尝试访问该对象,但遇到“jQuery.Deferred 异常:无法获取未定义或空引用的属性 '1'...”(注 '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() 函数访问该信息时,我得到了异常。我的猜测是它试图在准备好之前访问信息(如果我尝试从浏览器的控制台访问它,它可以工作),这就是我添加延迟/承诺的原因。
有人对我如何解决这个问题有任何建议吗?
谢谢!
【问题讨论】:
-
done(getDogs())立即调用getDogs,然后在getText()完成时调用getDogs()的结果。你可能想要done(getDogs)。 -
避免使用deferred antipattern!而且你打电话给
deferred.resolve()太早了。
标签: jquery ajax asynchronous promise deferred