为什么从网站获取信息时数据显示不正确?

时间:2021-04-11 16:52:34

标签: javascript weather openweathermap

我目前正在编写一个天气应用程序(为了好玩),它获取用户的经度和纬度(经许可),然后将显示当前天气。不幸的是,天气数据没有正确记录在控制台中。任何帮助将不胜感激!谢谢!

const api = "API---";


window.addEventListener('load', () => {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition((position) => {
            let lat = position.coords.latitude;
            let lon = position.coords.latitude;
            let data = `https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${lon}&appid=${api}`;
            console.log(lat, lon, data);
            fetch(data)
                .then((r) => {
                    return r.JSON;
                })
                .then((data) => {
                    console.log(data);
                })
        });
    };
});

不是记录天气,而是记录天气

ƒ json() { [native code] }

我使用的是开放天气,但 API 密钥不会公开显示。感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您的问题在这里: return r.JSON

根据MDN Web Docs.json() 函数是一个函数。你需要括号来调用它,就像任何其他函数一样。如果您将该行更改为 return r.json();,它应该可以工作。我用我的 API 密钥进行了测试(尽管没有您拥有的 navigator.geolocation 东西),这对我有用。

至于您为什么看到 ƒ json() { [native code] },那是因为您返回了一个实际函数。因此,当您 console.log 返回值时,它显示的是一个函数,而不是您想要的数据。

换句话说,您在这里的问题似乎是一个错字,忘记在您的函数调用中包含括号。包含括号应该可以解决您的问题。

答案 1 :(得分:0)

输出是这样的,因为你要返回 r.JSON 这是一个函数,因此第二个数据是

ƒ json() { [native code] }

应该是

fetch(data)
    .then((r) => {
        return r.json();
    })
    .then((data) => {
        console.log(data);
    });

json 是正确的函数,它将 JSON 响应解析为原生 JavaScript 对象并返回一个 promise,该 promise 与响应对应的 JavaScript 对象解析