问题描述
我目前正在编写一个天气应用程序(为了好玩),它获取用户的经度和纬度(经许可),然后将显示当前天气。不幸的是,天气数据没有正确记录在控制台中。任何帮助将不胜感激!谢谢!
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 密钥不会公开显示。感谢您的帮助!
解决方法
您的问题在这里:
return r.JSON
根据MDN Web Docs,.json()
函数是一个函数。你需要括号来调用它,就像任何其他函数一样。如果您将该行更改为 return r.json();
,它应该可以工作。我用我的 API 密钥进行了测试(尽管没有您拥有的 navigator.geolocation
东西),这对我有用。
至于您为什么看到 ƒ json() { [native code] }
,那是因为您返回了一个实际函数。因此,当您 console.log
返回值时,它显示的是一个函数,而不是您想要的数据。
换句话说,您在这里的问题似乎是一个错字,忘记在您的函数调用中包含括号。包含括号应该可以解决您的问题。
,输出是这样的,因为你要返回 r.JSON 这是一个函数,因此第二个数据是
ƒ json() { [native code] }
应该是
fetch(data)
.then((r) => {
return r.json();
})
.then((data) => {
console.log(data);
});
json 是正确的函数,它将 JSON 响应解析为原生 JavaScript 对象并返回一个 promise,该 promise 与响应对应的 JavaScript 对象解析