Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.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 代码未显示JSON数据_Javascript_Json_Ajax_Parsing_Httprequest - Fatal编程技术网

Javascript 代码未显示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

嘿,伙计们,我正试图向一个JSON页面发出请求,获取数据,然后将其显示到我的控制台,但它给了我未定义的信息。为什么呢

下面是代码,然后JSON页面将发布在下面:

(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;i希望此分析能帮助您更正代码。

到底是什么显示了未定义的内容?响应是一个对象,而不是数组,因此它没有长度。循环根本不应该运行。parsedAPOD是数组吗?所以用in代替。@MamdouhFreelancer因为缩进很难分辨,但是apodRequest.open。。。位于onreadystatechange处理程序中,因此将永远不会executed@vlaz上面的xhr响应是一个对象而不是数组。
apodRequest.onload = function() {
        //Code here
};