我正在进行嵌套的API调用,并将结果片段放在一个对象数组中。当我将它打印到控制台时,它看起来很好。但是当我试图在碎片上调用函数时,它们会破坏。
以下是私有API网址的代码:
var gate = new Array();
jQuery.getJSON(endPoint + "method=GetUsersWithTicketsEventId", function(tickets) {
jQuery.each(tickets.message, function(i, ticket) {
gate[i] = new Object();
jQuery.getJSON(endPoint + "method=GrabUsersCustomEventInfo&userId=" + ticket.UserId, function(answers) {
jQuery.each(answers.message, function(j, answer) {
if (answer.meta_key == "42_Volunteering") {
if (answer.meta_value != "Array") {
gate[i].Roles = answer.meta_value.split(';');
} else {
gate[i].Roles = new Array();
}
} else if (answer.meta_key == "42_1_TOSDate") {
gate[i].Date = new Date(answer.meta_value);
}
console.dir(gate[0].Date); // This works
});
});
});
console.dir(gate); // This works
console.dir(gate[0].Date); // This returns undefined
});
第二个console.dir()的结果似乎很好:
> Array(237)
> [0 … 99]
> 0: Object
> Date: Mon May 08 2017 21:09:09 GMT-0700 (Pacific Daylight Time)
> __proto__: Object
> constructor: function Date()
...
我认为这与变量范围有关,但是当控制台输出与解释器看到的明显不同时,我不明白如何调试它。
答案 0 :(得分:1)
在代码的最后:
console.dir(gate); // This works:
因为您之前已经定义了对象,并且您告诉控制台打印出随着更多数据进入而更新的对象。
console.dir(gate[0].Date); // This returns undefined
返回undefined,因为在执行的这一点上,数组实际上是空的。你的内部提取还没有填充到对象中,所以它是一个未定义的引用。