天气应用程序的api值-未捕获类型错误

pxq42qpu  于 2021-09-23  发布在  Java
关注(0)|答案(1)|浏览(376)

我觉得这是一个愚蠢的问题,但我正在尝试学习更多关于使用javascript的API的知识。我正在使用开放天气应用程序的api。
我的项目的一部分将允许用户在表单中键入一个城市,然后api获取当前天气/当前温度等。这部分工作完全正常。
我正在尝试创建一个页面,允许用户在表单中键入一个城市,然后显示未来几天的预测。
它无法识别api中的值。我相信我使用的是网站上的正确文档,如下所示:https://openweathermap.org/forecast16
我正在使用fetch并调用它,但是值是“undefined”,我得到uncaughttypeerror:无法读取undefined的属性“temp”。
以下是url和部分js代码:

const api = `https://api.openweathermap.org/data/2.5/forecast/daily? 
q=${input}&cnt=2&lang=en&appid=${myKey}&units=metric`;

  populateUI(data) {

    this.uiContainer.innerHTML = `

    <div class="card mx-auto mt-5" style="width: 18rem;">
    <div class="card-body justify-content-center">
    <h5 class="card-title">${data.name}</h5>
    <p class="card-subtitle mb-2 text-muted">Highs of ${data.list.temp.min}. Lows of 
    ${data.list.temp.max}</p>
    <p class="card-text ">Weather conditions are described as: 
    ${data.list.weather.description}</p>
    <p class="card-text ">Feels like: ${data.list.feels_like}</p>

    <p class="card-text ">Wind speed: ${data.list.humidity} m/s</p>          
    </div>
</div>
`;
 }

如果我将${data.list}放在所有的url中,我会得到401(未经授权),因此我不确定我的url是否错误,但由于文档的原因,它看起来还可以吗?我是否需要为预测生成第二个api密钥,因为我已经拥有站点当前天气部分的api密钥?

kqlmhetl

kqlmhetl1#

根据文档中的示例json结构, list 是一个对象数组,每个对象都包含以下属性 temp . (看见https://openweathermap.org/forecast16#json)
要在代码中访问这些属性,您应该在 data.list 并从每个项目中获取属性。例如:

let stringAsHTML = ``;

data.list.forEach(obj => stringAsHTML += `<p>Highs of ${obj.temp.min}</p>`);

相关问题