Javascript 如何实现自动更新的天气预报?

Javascript 如何实现自动更新的天气预报?,javascript,html,openweathermap,Javascript,Html,Openweathermap,请帮忙,目前我有一个错误`类型错误:weather.sys未定义。 我用开放式天气图工作。 我想为每个街区自动更新日期,水和空气温度取决于城市。 我必须马上说地理定位将把重点放在俄罗斯 我将为你的回答感到高兴 const-api={ 键:“11C85EC89D2AB5901101A07349DD25”, 基本URL:“https://api.openweathermap.org/data/2.5/" } const weather\uuu wrapper=document.addEventLi

请帮忙,目前我有一个错误`类型错误:weather.sys未定义。 我用开放式天气图工作。 我想为每个街区自动更新日期,水和空气温度取决于城市。 我必须马上说地理定位将把重点放在俄罗斯 我将为你的回答感到高兴

const-api={
键:“11C85EC89D2AB5901101A07349DD25”,
基本URL:“https://api.openweathermap.org/data/2.5/"
}
const weather\uuu wrapper=document.addEventListener('DOMContentLoaded',setQuery);
var check=document.querySelector('.weather\uuu city').textContent;
函数集查询(evt){
const wrappers=document.querySelectorAll('.weather_uuwrapper');
wrappers.forEach(w=>{
var city=w.querySelector('weather_uucity');
结果(城市);
});
}
函数getResults(查询){
fetch(`api.baseurl}weather?q=${query}&units=metric&APPID=${api.key}`)
.然后(天气=>{
return weather.json();
})。然后(显示结果);
}
功能显示结果(天气){
控制台.日志(天气);
让city=document.queryselectoral('.weather\uuu text.weather\uuu city');
city.innerText=`${weather.name},${weather.sys.country}`;
让我们现在=新日期();
let date=document.querySelector('.weather\uuu text.weather\uuu date');
date.innerText=dateBuilder(现在);
}
函数日期生成器(d){
月份=[“01”、“02”、“03”、“04”、“05”、“06”、“07”、“08”、“09”、“10”、“11”、“12”];
让date=d.getDate();
设月=月[d.getMonth()];
让year=d.getFullYear();
返回`${date}.${month}.${year}`;
}
.weather\uuu包装{
高度:186px;
宽度:355px;
边界半径:5px;
背景色:#e4e8ef;
填充:24px 24px 24px 24px;
左边距:30px;/*бааааа*/
}
.天气图标{
浮动:左;
利润上限:26px;
}
.天气图标i{
颜色:#fab165;
字号:5.938em;
}
.天气预报{
浮动:对;
}
.气象城市{/*城市{输入*/
字体大小:400;
字号:1.500em;
页边距底部:0!重要;
}
.天气温度{
字号:800;
字号:1.500em;
页边距底部:0!重要;
}
.天气预报{
字号:1.250em;
字号:200;
页边距底部:0!重要;
}
.幻灯片-天气项目{
显示器:flex;
大纲:无;
}
.滑坡天气{
边缘底部:100px;
}

文件
你好
索契市

+23摄氏度-空气

+23摄氏度-水 2020年5月29日

新罗西斯克

+23摄氏度-空气

+23摄氏度-水 2020年5月29日

格伦日克

+23摄氏度-空气

+23摄氏度-水 2020年5月29日


发生这种情况是因为您将整个标记作为城市名称而不是innerHTML传递:

getResults(city.innerHTML);
您收到weather.sys错误,因为天气变量不包含任何数据。因此,您应该在displayResults函数内部或调用它之前添加一些错误处理

编辑:添加温度更新:

var parent = document.querySelector('.' + weather.name.toLowerCase()).parentNode
parent.querySelector('.weather__current-temp .weather__temperature').innerHTML = Math.round(weather.main.temp) + '<sup>o</sup>C - air';
var parent=document.querySelector('..+weather.name.toLowerCase()).parentNode
parent.querySelector('.weather\uuuu current-temp.weather\uuuu temperature').innerHTML=Math.round(weather.main.temp)+'oC-air';
这段代码相当难看,但它只是它应该如何工作的一个示例。您应该将html构建和父搜索移动到一个单独的函数。如果您有针对所有天气城市元素的城市类,这将起作用

如果您不想添加城市类,并且希望通过innerText搜索父级,请选中以下答案:

它的工作原理如下:

const-api={
键:“11C85EC89D2AB5901101A07349DD25”,
基本URL:“https://api.openweathermap.org/data/2.5/"
}
const weather\uuu wrapper=document.addEventListener('DOMContentLoaded',setQuery);
var check=document.querySelector('.weather\uuu city').textContent;
函数集查询(evt){
const wrappers=document.querySelectorAll('.weather_uuwrapper');
wrappers.forEach(w=>{
var city=w.querySelector('weather_uucity');
getResults(city.innerHTML);
});
}
函数getResults(查询){
fetch(`api.baseurl}weather?q=${query}&units=metric&APPID=${api.key}`)
.然后(天气=>{
return weather.json();
})。然后(显示结果);
}
功能显示结果(天气){
让city=document.queryselectoral('.weather\uuu text.weather\uuu city');
city.innerText=`${weather.name},${weather.sys.country}`;
让我们现在=新日期();
let date=document.querySelector('.weather\uuu text.weather\uuu date');
date.innerText=dateBuilder(现在);
document.querySelector('.+weather.name.toLowerCase()).parentNode.querySelector('.weather\uu current-temp.weather\uu temperature')。innerHTML=Math.round(weather.main.temp)+“oC-air”;
}
函数日期生成器(d){
月份=[“01”、“02”、“03”、“04”、“05”、“06”、“07”、“08”、“09”、“10”、“11”、“12”];
让date=d.getDate();
设月=月[d.getMonth()];
让我来