Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/16.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 如何从API中提取和显示数据?_Javascript_Json - Fatal编程技术网

Javascript 如何从API中提取和显示数据?

Javascript 如何从API中提取和显示数据?,javascript,json,Javascript,Json,我正在尝试从网站下载并显示API数据。以下是我当前使用的代码: function loadJSON(file, callback) { var xobj = new XMLHttpRequest(); xobj.overrideMimeType("application/json"); xobj.open('GET', file, true); xobj.onreadystatechange = function () {

我正在尝试从网站下载并显示API数据。以下是我当前使用的代码:

      function loadJSON(file, callback) {

      var xobj = new XMLHttpRequest();
      xobj.overrideMimeType("application/json");
      xobj.open('GET', file, true);
      xobj.onreadystatechange = function () {
            if (xobj.readyState == 4 && xobj.status == "200") {
              callback(xobj.responseText);
            }
      };
      xobj.send(null);
   }
      var outerSpace;
      loadJSON("http://api.open-notify.org/astros.json", gotData);

      function gotData(data) {
          outerSpace = data;
      }

      if (outerSpace) {
        console.log(outerSpace.people.name);
      }
这是完整的API(不多)


console.log输出不应该是“Peggy Whitson”吗?我没有收到任何错误消息,但控制台没有收到任何消息。如果有人能帮我找到解决办法,我将不胜感激。谢谢大家!

有两个问题。函数gotData将数据作为字符串加载,因此需要将该字符串解析为JSON:

function gotData(data) {
    outerSpace = JSON.parse(data);
}
其次,people是一个数组,因此如果只想获取其中一个名称,则需要指定该对象的索引

if (outerSpace) {
    console.log(outerSpace.people[0].name);
}

我认为其他答案都很好,我只是想指出我认为误解的地方:

  // Here you create the callback.
  // It will run later when the ajax-call completes.
  function gotData(data) {
    outerSpace = data;
  }

  // This however runs immediately and only once.
  // outerSpace will *always* be undefined at this point 
  // Because gotData has not yet completed. 
  // (The whole thing about ajax-calls are that they complete *later*.)
  if (outerSpace) {
    console.log(outerSpace.people.name);
  }
您将
if
视为它可能意味着
时(遗憾的是没有这样的事情),您所拥有的只是回调,因此您必须将您的逻辑放在那里:

  function gotData(data) {
    outerSpace = data;
    if (outerSpace) {
      console.log(outerSpace.people.name);
    }
  }

首先,删除if语句,以便查看服务器是否出现404或500错误:[if(xobj.readyState==4&&xobj.status==“200”){callback(xobj.responseText);}]另外
people
是一个数组,因此不能直接调用
people.name
。使用
outerSpace.people[0].name
获取名字。@Abiezer没有错误消息。@Racil Hilan仍然没有记录任何内容。我这么说也是因为这不是主要问题。如果这是主要问题,我会把它作为一个答案而不是一个评论。但一旦你解决了主要问题,你会在这一行有一个错误,需要修复它。我没有收到错误消息,但仍然没有控制台消息。这是我的代码:您可以在代码的前面添加日志记录。例如,在测试时,我可能会在您的gotData函数中添加
console.log(data)
,以查看您是否正确检索数据。
  function gotData(data) {
    outerSpace = data;
    if (outerSpace) {
      console.log(outerSpace.people.name);
    }
  }