我想用JavaScript获取5天的天气预报。
当我执行下面的代码时,我得到:
TypeError: Cannot read property 'temp' of undefined
如果我将https://api.openweathermap.org/data/2.5/forecast?q=
更改为:
https://api.openweathermap.org/data/2.5/weather?q=
我准确无误地了解当前天气。
为什么预测在我的情况下不起作用?我是不是错过了什么?
JavaScript(我想.then(data =>
代码段中有问题):
var activities = document.getElementById('activitySelector');
var main = document.querySelector('#name');
var temp = document.querySelector('.temp');
var desc = document.querySelector('.desc');
activities.addEventListener('change', (e) => {
fetch('https://api.openweathermap.org/data/2.5/forecast?q='
+ e.target.value+'&appid=<<<<APIKEY>>>>&cnt=5')
.then(response => response.json())
.then(data => {
var tempValue = data['main']['temp'];
var nameValue = data['name'];
var descValue = data['weather'][0]['description'];
main.innerHTML = nameValue;
desc.innerHTML = "Desc - "+descValue;
temp.innerHTML = "Temp - "+tempValue;
})
.catch(err => alert(err));
})
HTML:
<select name="cities" id="activitySelector">
<div class="options">
<option class="option" value="warsaw">Warsaw</option>
<option class="option" value="phoenix">Phoenix</option>
<option class="option" value="berlin">Berlin</option>
</div>
</select>
<div class="container">
<div class="card">
<h1 class="name" id="name"></h1>
<p class="temp"></p>
<p class="clouds"></p>
<p class="desc"></p>
</div>
</div>
我正在尝试获取的JSON:
{"cod":"200","message":0,"cnt":5,"list":[{"dt":1618606800,"main":{"temp":279.45,"feels_like":277.97,"temp_min":278.72,"temp_max":279.45,"压力":1031,"海平面":1032,"湿度":56,"温度kf":0.73},";天气":[{"id":802,"main":"Clouds","description":"scattered"云"图标":"03n"}]"云":{"全部":25};"风":{"速度":2.06,"度":80,"阵风":6.1};可见性":10000;pop":0;sys":{"pod":"n"};dt_txt":"2021-04-16 21:00:00"},{"dt":1618617600,"main":{"temp":278.63,"feels_like":277.46,"temp_min":276.98,"temp_max":278.93,"pressure":1031,"sea_level":2051,"grnd_level temp_kf":1.65},";天气":[{"id":801,"main":"Clouds","description":"near"云"图标":"02n"}]"云":{"全部":23},";"风":{"速度":1.65,"度":53,"阵风":4.49};可见性":10000;pop":0;sys":{"pod":"n"};dt_txt":"2021-04-1700:00:00"},{"dt":1618628400,"main":{"temp":276.91,"feels_like":275.48,"temp_min":275.64,"temp_max":276.901,"pressure":1031,"sea_level":2051,"grnd_level temp_kf":1.27},";天气":[{"id":800,"main":"Clear","description":"Clear天空"图标":"01n"}]"云":{"全部":10},";"风":{"速度":1.65,"度":21,"阵风":4.06};可见性":10000;pop":0;sys":{"pod":"n"};dt_txt":"2021-04-1703:00:00〃},{"dt":1618639200,"main":{"temp":275.25,"feels_like":273.27,"temp_min":275.25',"temp_max":275.25,"pressure":1031,"sea_level":2051,"grnd_level":1028,"湿度":67,"temp_kf"0};天气":[{"id":800,"main":"Clear","description":"Clear天空"图标":"01d"}]"云":{"all":1};"风":{"速度":1.89,"度":16,"阵风":4.72};可见性":10000;pop":0;sys":{"pod":"d"};dt_txt":"2021-04-1706:00:00〃},{"dt":1618650000,"main":{"temp":280.37,"feels_like":278.43,"temp_min":280.357,"temp_max":280.3.7,"pressure":1030,"sea_level":1030,"grnd_level":1027,"湿度":44,"temp _kf":0},";天气":[{"id":800,"main":"Clear","description":"Clear天空"图标":"01d"}]"云":{"all":2};"风":{"速度":2.84,"度":39,"阵风":4.51};可见性":10000;pop":0;sys":{"pod":"d"};dt_txt":"2021-04-1709:00:00"}]"城市":{"id":2643743,"name":"London","coord":{"lat":51.5085,"lon":-0.1257};country":"GB""群体":1000000,";"时区":3600;日出":1618549331;日落":1618599475}}
问题只是取消引用所需值的方式。
CCD_ 4具有属性CCD_。list
是一个对象数组,每个对象都有一个main
键,该键指向一个具有temp
键的对象。
例如,您可以抓取所有元素并记录它们的main.temp
字段,如下所示:
const data = {
"cod": "200",
"message": 0,
"cnt": 5,
"list": [{
"dt": 1618606800,
"main": {
"temp": 279.45,
"feels_like": 277.97,
"temp_min": 278.72,
"temp_max": 279.45,
"pressure": 1031,
"sea_level": 1031,
"grnd_level": 1028,
"humidity": 56,
"temp_kf": 0.73
},
"weather": [{
"id": 802,
"main": "Clouds",
"description": "scattered clouds",
"icon": "03n"
}],
"clouds": {
"all": 25
},
"wind": {
"speed": 2.06,
"deg": 80,
"gust": 6.1
},
"visibility": 10000,
"pop": 0,
"sys": {
"pod": "n"
},
"dt_txt": "2021-04-16 21:00:00"
}, {
"dt": 1618617600,
"main": {
"temp": 278.63,
"feels_like": 277.46,
"temp_min": 276.98,
"temp_max": 278.63,
"pressure": 1031,
"sea_level": 1031,
"grnd_level": 1028,
"humidity": 61,
"temp_kf": 1.65
},
"weather": [{
"id": 801,
"main": "Clouds",
"description": "few clouds",
"icon": "02n"
}],
"clouds": {
"all": 23
},
"wind": {
"speed": 1.65,
"deg": 53,
"gust": 4.49
},
"visibility": 10000,
"pop": 0,
"sys": {
"pod": "n"
},
"dt_txt": "2021-04-17 00:00:00"
}, {
"dt": 1618628400,
"main": {
"temp": 276.91,
"feels_like": 275.48,
"temp_min": 275.64,
"temp_max": 276.91,
"pressure": 1031,
"sea_level": 1031,
"grnd_level": 1027,
"humidity": 66,
"temp_kf": 1.27
},
"weather": [{
"id": 800,
"main": "Clear",
"description": "clear sky",
"icon": "01n"
}],
"clouds": {
"all": 10
},
"wind": {
"speed": 1.65,
"deg": 21,
"gust": 4.06
},
"visibility": 10000,
"pop": 0,
"sys": {
"pod": "n"
},
"dt_txt": "2021-04-17 03:00:00"
}, {
"dt": 1618639200,
"main": {
"temp": 275.25,
"feels_like": 273.27,
"temp_min": 275.25,
"temp_max": 275.25,
"pressure": 1031,
"sea_level": 1031,
"grnd_level": 1028,
"humidity": 67,
"temp_kf": 0
},
"weather": [{
"id": 800,
"main": "Clear",
"description": "clear sky",
"icon": "01d"
}],
"clouds": {
"all": 1
},
"wind": {
"speed": 1.89,
"deg": 16,
"gust": 4.72
},
"visibility": 10000,
"pop": 0,
"sys": {
"pod": "d"
},
"dt_txt": "2021-04-17 06:00:00"
}, {
"dt": 1618650000,
"main": {
"temp": 280.37,
"feels_like": 278.43,
"temp_min": 280.37,
"temp_max": 280.37,
"pressure": 1030,
"sea_level": 1030,
"grnd_level": 1027,
"humidity": 44,
"temp_kf": 0
},
"weather": [{
"id": 800,
"main": "Clear",
"description": "clear sky",
"icon": "01d"
}],
"clouds": {
"all": 2
},
"wind": {
"speed": 2.84,
"deg": 39,
"gust": 4.51
},
"visibility": 10000,
"pop": 0,
"sys": {
"pod": "d"
},
"dt_txt": "2021-04-17 09:00:00"
}],
"city": {
"id": 2643743,
"name": "London",
"coord": {
"lat": 51.5085,
"lon": -0.1257
},
"country": "GB",
"population": 1000000,
"timezone": 3600,
"sunrise": 1618549331,
"sunset": 1618599475
}
}
for (const day of data.list){
console.log(`Temp: ${day.main.temp}`)
}
所以你有
https://api.openweathermap.org/data/2.5/forecast?q=
在文档中我看到
api.openweathermap.org/data/2.5/forecast/daily?q={city name}&cnt={cnt}&appid={API key}
所以我认为你的URL中每天都缺少/。