Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数内部构建的对象数组存在类型问题_Javascript_Jquery_Json - Fatal编程技术网

Javascript 函数内部构建的对象数组存在类型问题

Javascript 函数内部构建的对象数组存在类型问题,javascript,jquery,json,Javascript,Jquery,Json,我正在进行嵌套API调用,并将结果的各个部分放入一个对象数组中。当我把它打印到控制台上时,它看起来很好。但是当我尝试调用片段上的函数时,它们会中断 以下是除专用API URL之外的代码: var gate = new Array(); jQuery.getJSON(endPoint + "method=GetUsersWithTicketsEventId", function(tickets) { jQuery.each(tickets.message, function(i, ticke

我正在进行嵌套API调用,并将结果的各个部分放入一个对象数组中。当我把它打印到控制台上时,它看起来很好。但是当我尝试调用片段上的函数时,它们会中断

以下是除专用API URL之外的代码:

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()
...

我假设这与变量作用域有关,但当控制台输出与解释器看到的明显不同时,我不明白如何调试它。

在代码末尾:

console.dir(gate); // This works:
因为您之前已经定义了对象,并且您正在告诉控制台打印出对象,该对象将随着更多数据的进入而更新

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

这将返回undefined,因为在执行的这一点上,数组实际上是空的。您的内部提取尚未填充对象,因此它是一个未定义的引用

这是一个异步问题。console.dirgate[0]。日期;在构建对象之前运行。哦,因为getJSON是异步的!!那么,我如何设计这种东西来适应这种情况呢?考虑使用承诺来等待一切完成。