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

使用OpenWeather API获取UV Index报错:response.city.coord is not a function

排查并修复UV Index获取的代码问题

首先咱们先揪出导致response.city.coord is not a function错误的核心原因:

  • 你错误地把字符串"response.city.coord"当成函数来调用了,这完全不符合JS访问对象属性的语法。正确的方式是直接从forecast接口返回的response对象里读取属性,而不是用字符串包裹后加括号。
  • 另外,你的UV请求必须放在forecast请求的回调函数里,确保拿到经纬度后再发起请求,不然可能会因为异步顺序问题导致拿不到数据。
  • 还有个小细节:模板字符串里的&要换成&,因为模板字符串不需要HTML转义。

修正后的完整代码示例

假设你已经有了forecast接口的请求,把UV的请求嵌套进去就能保证时序正确:

// 先发起forecast接口请求获取目标城市经纬度
var apiKeyForecast = "你的forecast接口API密钥";
var forecastQueryURL = `https://api.openweathermap.org/data/2.5/forecast?appid=${apiKeyForecast}&q=目标城市`;

$.ajax({
    url: forecastQueryURL,
    method: "GET"
}).then(function(forecastResponse) {
    // 正确读取经纬度:直接访问对象属性,而非错误的字符串调用
    var lat = forecastResponse.city.coord.lat;
    var lon = forecastResponse.city.coord.lon;
    var apiKey1 = "ada1f715672a438e9b9acaa7ea0e930b";
    // 修正URL里的&符号,模板字符串无需HTML转义
    var queryURL2 = `https://api.openweathermap.org/data/2.5/uvi?appid=${apiKey1}&lat=${lat}&lon=${lon}`;

    // 发起UV指数请求
    $.ajax({
        url: queryURL2,
        method: "GET",
    }).then(function(res) {
        var uvI = res.value;
        $(".uvIndex").text("UV Index: " + uvI);
    }).catch(function(err) {
        // 添加错误捕获,方便调试问题
        console.error("获取UV指数失败:", err);
        $(".uvIndex").text("UV Index: 获取失败");
    });
}).catch(function(err) {
    console.error("获取forecast数据失败:", err);
});

关键修正点说明

  • 经纬度读取语法:用forecastResponse.city.coord.latforecastResponse.city.coord.lon直接访问对象嵌套属性,替换掉错误的字符串函数调用写法。
  • 异步请求顺序:将UV请求嵌套在forecast请求的then回调内,保证只有拿到经纬度后才发起UV请求,避免异步时序问题。
  • URL格式修正:模板字符串中直接使用&而非&,因为HTML转义字符在JS代码里不需要。
  • 错误处理增强:添加catch回调捕获请求失败的情况,方便调试同时提升页面体验。

这样修改后,就能正确获取UV指数并显示在页面上了。

内容的提问来源于stack exchange,提问作者Félix

火山引擎 最新活动