我想用JavaScript获取5天的天气预报。当我执行下面的代码时,我得到<code>类型错误:无法读取未定义tohttps://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," pressure":1031," sea_level":1031," grnd_level":1028,"湿度":56," temp_kf":0.73}
所以你有
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中缺少/daily。
问题只是您取消引用所需值的方式。
data
有一个属性list
。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}`)
}
问题内容: 我知道我可以通过JavaScript 设置 CSS值,例如: 但是,我可以获得当前的特定样式值吗?我已经读到了可以获取元素整个样式的地方,但是如果不需要的话,我不想解析整个字符串。 问题答案: 你可以使用getComputedStyle()。
问题内容: 我想要的只是获取网站URL。不是从链接获取的URL。在页面加载过程中,我需要能够获取网站的完整,当前URL,并将其设置为一个变量,以便我随意使用。 问题答案: 使用: 如评论中所述,下面的行有效,但对于Firefox而言是错误的。
问题内容: 遇到了似乎是同源政策的问题,这引起了很多麻烦! 为了追赶,我基本上是在仅提供用户名时尝试获取用户的steam64id。 例如,我的用户名:“ Emperor_Jordan”将转到: http://steamcommunity.com/id/emperor_jordan?xml=1 而我需要的小蒸汽就在顶部。所以我想我将使用JQuery Ajax来获取它并解析出我以后需要使用的id(st
这是我的第一篇文章,因为我找不到任何解决我的问题的方法。(现在谷歌了几天)我不是程序员,我是一个好的谷歌人:) 我正在尝试使用用户名,密码和一些选项登录网站。(/api/login/Basic)之后,我尝试访问一个网站。(/api/sitemaster/run)但在这里,我收到消息:“用户没有足够的访问权限”如果我使用浏览器执行此操作,一切正常。 我想我需要将一些Authtoken传递给Get请求
问题内容: 我有一个XML文档,其中包含具有格式正确的HTML内容的标签。我需要使用JavaScript将HTML导入页面。但是,由于CMS问题,HTML不能使用<![CDATA []]>或其他任何符号进行转义,并且<>必须存在,而不是编码为&lt;。&gt; 我使用jQuery来获取XML,并将子菜单放入数组中。我可以通过以下方式获取文字: 但是,这仅返回“ Hello World Lorem
问题内容: 关于如何在不使用jQuery的情况下获得div高度的任何想法? 我正在搜索Stack Overflow这个问题,似乎每个答案都指向jQuery的。 我尝试了类似的方法,但是即使我的div具有CSS 并在CSS中进行了设置,它也没有返回任何内容。 问题答案: 要么 包括填充。 包括填充,scrollBar和边框。