错误无法读取未定义的属性“ Lon”

时间:2019-07-08 21:06:30

标签: javascript

我需要读取jason文件以将一些数据放置在表中,虽然已经完成了,但是程序给了我一个错误

这将读取从Postgresql中的数据库生成的文件

我正在读取的数据如下

<Locations>
<Ce>188</Ce>
<Id>1</Id>
<Lat>10.330385</Lat>
<Lon>-75.50266</Lon>
<N_2>1000</N_2>
<N_3>2000</N_3>
<Nombre>mce_cartagena1</Nombre>
<Ult_t>2019-07-08 21:03:25</Ult_t>
<alarm>0</alarm>
<error i:nil="true"/>
</Locations>
<Locations>
<Ce>-53</Ce>
<Id>2</Id>
<Lat>4.789242</Lat>
<Lon>-74.054513</Lon>
<N_2>1000</N_2>
<N_3>2000</N_3>
<Nombre>mce_santo_tomas</Nombre>
<Ult_t>2019-07-08 21:02:30</Ult_t>
<alarm>0</alarm>
<error i:nil="true"/>
</Locations>

我在这里读取数据

        var url = 'http://190.85.6.14/mills_status/Api',
                    params = {
                        method: 'GET',
                        mode: 'cors',
                        redirect: 'follow',
                        headers: new Headers({
                            'Content-Type': 'application/json'
                        })
                    };

                var request = new Request(url, params);

                fetch(request).then(r => r.json())
                    .then(datos => {
                        tabla(datos);
                    })
                    .catch(e => console.error('Something went wrong',e));

在这里,我浏览数据以将它们放置在向量中

        function tabla(datos) {
                contenido.innerHTML = '';
                for (var i = 0; i <= datos.length; i++) {
                    cordenadasLo[i] = parseFloat(datos[i].Lon);
                    cordenadasLa[i] = parseFloat(datos[i].Lat);
                    nivel[i] = parseInt(datos[i].alarm);

他正确读取了数据,但错误仍然存​​在

Something went wrong TypeError: Cannot read property 'Lon' of undefined
    at tabla (JavaScript.js:80)
    at JavaScript.js:71
(anonymous) @ JavaScript.js:73

1 个答案:

答案 0 :(得分:0)

如评论中所述,您正在尝试将XML解析为JSON,但这是行不通的,因为XML和JSON是完全不同的两件事。

要解决此问题,请用解析XML的代码替换您的r.json()调用。我改编了this answer中的代码来做到这一点。

fetch(request).then(r => r.text())
    .then(str => (new window.DOMParser()).parseFromString(str, "text/xml"))
    .then(datos => { tabla(datos); })
    .catch(e => console.error('Something went wrong',e));

注意:您需要调整tabla函数以使用类似datos.getElementsByTagName("Locations")的东西遍历数据

如果您使用的是node.js,则可以改用xml-js