Javascript 代码未显示JSON数据
嘿,伙计们,我正试图向一个JSON页面发出请求,获取数据,然后将其显示到我的控制台,但它给了我未定义的信息。为什么呢 下面是代码,然后JSON页面将发布在下面:Javascript 代码未显示JSON数据,javascript,json,ajax,parsing,httprequest,Javascript,Json,Ajax,Parsing,Httprequest,嘿,伙计们,我正试图向一个JSON页面发出请求,获取数据,然后将其显示到我的控制台,但它给了我未定义的信息。为什么呢 下面是代码,然后JSON页面将发布在下面: (function Apod() { var api_key = 'NNKOjkoul8n1CH1NoUFo', url = 'https://api.nasa.gov/planetary/apod' + "?api_key=" + api_key, data; var apodReque
(function Apod() {
var api_key = 'NNKOjkoul8n1CH1NoUFo',
url = 'https://api.nasa.gov/planetary/apod' + "?api_key=" + api_key,
data;
var apodRequest = new XMLHttpRequest();
apodRequest.onreadystatechange = function() {
if (apodRequest.readyState === 4 && apodRequest.status === 200) {
var response = apodRequest.responseText;
var parsedAPOD = JSON.parse(response);
data += parsedAPOD;
for (i = 0; i < parsedAPOD.length; i++) {
data += parsedAPOD[i];
console.log("Parsing lines: <br>" + parsedAPOD[i]);
}
}
apodRequest.open("GET", url, true);
apodRequest.send(null);
}
}());
首先,parsedAPOD是一个对象,parsedAPOD.length无效。您可以使用for-in-loop遍历对象,如下所示
for (var i in parsedAPOD) {
data += parsedAPOD[i];
console.log("Parsing lines: <br>" + parsedAPOD[i]);
}
您的代码中有一些错误 首先,它的总体结构应该是这样的
(function Apod() {
var api_key = 'NNKOjkoul8n1CH1NoUFo',
url = 'https://api.nasa.gov/planetary/apod' + "?api_key=" + api_key,
data;
var apodRequest = new XMLHttpRequest();
apodRequest.onreadystatechange = function() {
//Code here
};
apodRequest.open("GET", url, true);
apodRequest.send(null);
}());
注意我是如何移动apodRequest.openGET的,url,true;和apodRequest.sendnull;在onreadystatechange处理程序之外
第二,而不是
apodRequest.onreadystatechange = function() {
if (apodRequest.readyState === 4 && apodRequest.status === 200) {
//Code here
}
}
你可以简单地做
apodRequest.onload = function() {
//Code here
};
因为它是在返回响应时触发的事件。所以你不需要内部的if检查
最后,在onload处理程序中,您有一些错误,例如:
数据+=parsedAPOD;这是错误的,因为到目前为止数据是一个未定义的对象,而parsedAPOD是一个对象。在两个对象之间执行+=不会合并它们。如果要合并两个对象,还有其他方法,例如。
对于i=0;iapodRequest.onload = function() {
//Code here
};