You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

天气API无法正常工作:调用无返回数据,无法更新HTML温度标签求助

解决天气API无返回数据的问题

嘿,我瞅了你的代码,问题其实出在异步请求的执行顺序上——这是新手用AJAX常踩的坑!

问题根源分析

你写的两个$.getJSON是异步执行的:

  • 第一个请求(获取IP地理位置)发起后,浏览器不会等待它返回结果,就直接执行第二个天气API请求了
  • 这时候loc数组还是初始的空数组,loc[0]loc[1]都是undefined,导致天气API的请求URL参数无效,自然拿不到任何返回数据

修正后的代码

把天气API的请求放到第一个请求的回调函数里,确保拿到经纬度后再发起请求:

$(document).ready(function() {
  var loc = [];
  console.log(loc); // 这里打印的是空数组,因为第一个请求还没完成

  $.getJSON("https://ipinfo.io?token=97f4f0d67b28dc", function(response) {
    loc = response.loc.split(",");
    document.getElementById("Location").innerHTML = response.city + "," + response.country;

    // 把天气API请求放到这里,确保loc已经有值
    $.getJSON(
      "https://fcc-weather-api.glitch.me/api/current?lat=" + loc[0] + "&lon=" + loc[1],
      function(data) {
        // 这里处理天气数据,比如更新温度标签
        if (data && data.main) {
          document.getElementById("Temperature").innerHTML = data.main.temp + "°C";
          // 还可以添加其他信息,比如天气描述
          document.getElementById("WeatherDesc").innerHTML = data.weather[0].description;
        } else {
          console.error("天气API返回数据格式异常");
        }
      }
    )
    .fail(function(jqXHR, textStatus, errorThrown) {
      // 捕获请求失败的情况,方便调试
      console.error("天气API请求失败:", textStatus, errorThrown);
    });
  })
  .fail(function(jqXHR, textStatus, errorThrown) {
    console.error("IP地理位置请求失败:", textStatus, errorThrown);
  });
});

额外调试建议

  • 打开浏览器控制台(F12),查看网络请求标签,看看天气API的请求URL是否正确,返回的状态码是什么
  • 在天气API的回调函数里打印console.log(data),确认返回的数据结构是否符合预期
  • 确保你的HTML页面里存在TemperatureWeatherDesc这些标签,不然无法更新内容

内容的提问来源于stack exchange,提问作者Mostafa Jaafer Ulobeed

火山引擎 最新活动