You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS调用OpenWeatherMap 5天预报循环填充多卡片仅单个生效求助

故障根因
  • DOM选择器拼接规则完全错位
    你在循环里直接把3小时间隔预报数组的原始索引(0、8、16、24、32)作为id后缀拼接选择器,和页面上5张天气卡片的id规则不匹配。
    通常页面上的5张卡片会按顺序设置id为date0/date1/date2/date3/date4,对应第1到第5天的展示位。但你拼出来的选择器是#date0、#date8、#date16、#date24、#date32,其中只有#date0能匹配到第一张卡片,剩下四个选择器指向的DOM节点根本不存在,后续循环拿到的预报数据无法写入对应卡片,最终表现就是所有内容只堆在了第一个匹配到的卡片上。
  • 循环计数器未做作用域声明
    for循环里的i没有加let/var声明,会变成全局作用域变量,极易和其他脚本的变量命名冲突,引发不可预期的逻辑错误。
  • 温度计算存在小误差
    代码里用开尔文温度减273.5做转换基准,实际标准转换基准为273.15,长期累计会带来可感知的温度数值偏差。
修正方案

单独维护一个从0开始递增的卡片序号,把每间隔8条提取的自然日预报数据,和顺序排列的5个卡片做一一映射,不再直接拿数组的大索引当DOM id后缀。修正后的代码如下:

function forecast(cityID) {
  let fiveDayForecastAPI = `http://api.openweathermap.org/data/2.5/forecast?q=${cityID}&appid=${myAPI}`;
  fetch(fiveDayForecastAPI)
    .then(response => response.json())
    .then(data => {
      const forecastList = data.list;
      let cardIndex = 0;
      // 按步长8遍历,每8条对应一个自然日
      for (let i = 0; i < forecastList.length; i += 8) {
        // 最多填充5张卡片,避免越界
        if (cardIndex > 4) break;

        const timestamp = forecastList[i].dt * 1000;
        const dateStr = new Date(timestamp).toLocaleDateString();
        const iconCode = forecastList[i].weather[0].icon;
        const iconUrl = `https://openweathermap.org/img/wn/${iconCode}.png`;
        const tempKelvin = forecastList[i].main.temp;
        // 修正开尔文转华氏度的计算逻辑
        const tempF = ((tempKelvin - 273.15) * 1.8 + 32).toFixed(2);
        const humidity = forecastList[i].main.humidity;

        // 按卡片顺序序号拼接选择器,匹配实际DOM节点
        $(`#date${cardIndex}`).text(dateStr);
        $(`#img${cardIndex}`).html(`<img src="${iconUrl}">`);
        $(`#temp${cardIndex}`).text(` ${tempF} F`);
        $(`#humidity${cardIndex}`).text(` ${humidity}%`);

        cardIndex++;
      }
    });
}
验证注意点
  • 调试时可在循环里打印拼出的选择器对应的DOM对象,确认每次循环都能匹配到非空的节点,避免因id拼写、层级问题导致的选择失效。
  • 提前检查页面上的5个卡片内的元素id,确保日期、图标、温度、湿度模块的id后缀为0、1、2、3、4,和代码的拼接规则一致。

内容的提问来源于stack exchange,提问作者Kurtis Jin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 10:06:10