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

天气应用本地离线功能正常,部署至服务器后失效的问题排查

问题排查与解决方案

1. 核心语法错误:await未在async函数中使用

你的代码直接在if块内使用await fetch(...),但await只能在async函数内部执行。本地测试时可能是在控制台或其他async上下文中运行,但线上部署时这段代码会直接抛出语法错误,导致整个逻辑瘫痪。

修复代码:将逻辑包裹在async函数中:

async function loadWeatherData() {
  if (navigator.onLine) {
    try {
      // 替换为你的有效OpenWeatherMap API密钥
      const response = await fetch("https://api.openweathermap.org/data/2.5/weather?q=Dhangadhi&units=metric&appid=你的有效API密钥");

      if (response.ok) {
        const datas = await response.json();         
        localStorage.setItem('Dhangadhi', JSON.stringify(datas));
        console.log("数据已存入本地缓存");
        renderWeatherData(JSON.parse(localStorage.getItem('Dhangadhi')));
      } else {
        console.error("请求失败,状态码:", response.status);
        // 请求失败时也尝试读取缓存
        fallbackToCachedData();
      }
    } catch (error) {
      console.error("请求异常:", error);
      fallbackToCachedData();
    }
  } else {
    // 处理离线状态
    fallbackToCachedData();
  }
}

// 封装缓存读取与渲染逻辑
function fallbackToCachedData() {
  const cachedData = localStorage.getItem('Dhangadhi');
  if (cachedData) {
    const storedData = JSON.parse(cachedData);
    console.log("读取本地缓存数据");
    renderWeatherData(storedData);
  } else {
    console.error("无可用缓存数据");
    // 可添加无数据提示逻辑
  }
}

// 调用主函数
loadWeatherData();

// 假设你有渲染数据的函数
function renderWeatherData(data) {
  // 此处编写页面渲染逻辑
}

2. localStorage同源限制问题

本地localhost与线上服务器属于不同源,本地测试时存入的缓存无法同步到线上环境。如果线上首次访问时API请求失败,原代码会直接执行JSON.parse(null),抛出错误导致功能失效。

修复方案:读取缓存前先判断数据是否存在,避免解析空值报错(上述代码已包含此判断)。

3. API密钥有效性问题

你代码中的5765879898u8u8是无效测试密钥,本地测试可能依赖之前缓存的数据,而线上首次访问时无缓存且API请求失败,导致无数据展示。

修复方案:替换为OpenWeatherMap官方提供的有效API密钥,若密钥设置了域名白名单,需将线上域名加入允许列表。

4. navigator.onLine的局限性

该API仅能判断浏览器是否联网,无法精准检测特定API的可用性(比如网络正常但API服务宕机)。原逻辑中,在线状态下API请求返回非200状态时不会读取缓存,导致此类情况无数据展示。

修复方案:在response.ok为false的分支中添加缓存读取逻辑,确保所有无法获取在线数据的场景都尝试使用缓存。

5. 离线逻辑缺失

原代码仅处理navigator.onLine为true的情况,完全未覆盖离线状态,导致离线时不会尝试读取缓存。

修复方案:补充else分支处理离线场景(上述代码已完善)。

内容的提问来源于stack exchange,提问作者Mahima Rai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:42:41