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);
}
我的第一个函数通过 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);
}