我的第一个函数通过jQuery AJAX请求获取JSON数组对象。 我的第二个函数试图访问该对象,但被一个" jQuery.Deferred异常命中:无法获取属性' 1'未定义或空引用..." (注意' 1'指我尝试访问oJSON [1] .name,如下面的代码所示。)
这是我的JSON:
[{"name":"Alpha", "numWalks":1},{"name":"Beta","numWalks":2}]
以下是我的代码:(注意:我必须将JSON保存为.txt文件并将其解析为JSON,因为我的SharePoint网站的设置方式。)
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()函数访问该信息时,我得到了异常。我的猜测是,在它准备就绪之前尝试访问信息(如果我尝试从我的浏览器控制台访问它,它可以工作),这就是为什么我添加了延迟/承诺
有人对我如何解决此问题有任何建议吗?
谢谢!
答案 0 :(得分:-1)
我的猜测是,它正准备在信息准备好之前访问
事实上。您过早地呼叫deferred.resolve
,并且您正在立即呼叫getDogs()
,而不是将其传递给当前。
避免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);
}