内部函数内置的对象数组具有类型问题

时间:2017-05-15 20:27:28

标签: javascript jquery json

我正在进行嵌套的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()
...

我认为这与变量范围有关,但是当控制台输出与解释器看到的明显不同时,我不明白如何调试它。

1 个答案:

答案 0 :(得分:1)

在代码的最后:

console.dir(gate); // This works:

因为您之前已经定义了对象,并且您告诉控制台打印出随着更多数据进入而更新的对象。

console.dir(gate[0].Date); // This returns undefined

返回undefined,因为在执行的这一点上,数组实际上是空的。你的内部提取还没有填充到对象中,所以它是一个未定义的引用。