Javascript 如何从API中提取和显示数据?
我正在尝试从网站下载并显示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 () {
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);
}
}