首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:无法读取未定义的空气质量API属性

TypeError:无法读取未定义的空气质量API属性
EN

Stack Overflow用户
提问于 2022-09-28 05:36:59
回答 1查看 22关注 0票数 0

当用户搜索一个城市时,我使用空气质量指数API来获取空气质量,下面是我所得到的错误的相关代码:

代码语言:javascript
复制
function retrieveAirQuality(topResultUrl) {
    var airQualityAPIUrl = "http://api.waqi.info/feed/"+topResultUrl+"/?token="+airQualityAPIToken;

    fetch(airQualityAPIUrl)
    .then(function(response) {
        return response.json();
    })
    .then(function(data) {
        if(data.status === "ok") {
            // Saves air quality results to variable
            var airQualityResult = {
                aqi: data.data.aqi,
                name: data.data.city.name,
                iaqi: data.data.iaqi,
                date: data.data.time
            }

            renderAirQuality(airQualityResult);
        }
    })
}

function renderAirQuality(airQuality) {
    stationNameEl.textContent = "Station Name: " + airQuality.name + " on " + airQuality.date.s;

    var aqi = document.createElement("tr");
    aqi.innerHTML = "<th>Air Quality Index</th><td>"+airQuality.aqi+"</td>"
    airQualityTableCellEl.appendChild(aqi);

    var humidity = document.createElement("tr");
    humidity.innerHTML = "<th>Humidity</th><td>"+airQuality.iaqi.h.v+"</td>"
    airQualityTableCellEl.appendChild(humidity);

    var oz = document.createElement("tr");
    oz.innerHTML = "<th>Ozone</th><td>"+airQuality.iaqi.o3.v+"</td>" //Error here
    airQualityTableCellEl.appendChild(oz);

    var pressure = document.createElement("tr");
    pressure.innerHTML = "<th>Atmospheric Pressure</th><td>"+airQuality.iaqi.p.v+"</td>"
    airQualityTableCellEl.appendChild(pressure);

    var pm25 = document.createElement("tr");
    pm25.innerHTML = "<th>PM2.5</th><td>"+airQuality.iaqi.pm25.v+"</td>"
    airQualityTableCellEl.appendChild(pm25);

    var co = document.createElement("tr");
    co.innerHTML = "<th>Carbon Monoxide</th><td>"+airQuality.iaqi.co.v+"</td>"
    airQualityTableCellEl.appendChild(co);
}

问题是,有些城市没有我想要添加到我的网站上的所有变量。例如,有许多城市没有从API中获得臭氧水平,因此我将在上面所述的行中得到"Uncaught (in promise) TypeError:无法读取未定义的属性(读取'v')“错误。不知道如何解决这个问题

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-28 06:12:13

对这一问题有许多不同的解决办法:

如果您想使用空的td保留一个tr,那么请使用以下命令:

代码语言:javascript
复制
var oz = document.createElement("tr");  
oz.innerHTML = "<th>Ozone</th><td>"+airQuality?.iaqi?.o3?.v+"</td>";  
airQualityTableCellEl.appendChild(oz); 

如果在参数不存在的情况下根本不想添加tr,那么执行如下操作:

代码语言:javascript
复制
var oz = document.createElement("tr");
oz.innerHTML = "<th>Ozone</th><td>"+airQuality?.iaqi?.o3?.v+"</td>";
(airQuality?.iaqi?.o3?.v) && airQualityTableCellEl.appendChild(oz);

甚至您也可以使用if条件实现第二个条件,如:if(airQuality?.iaqi?.o3?.v)

希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73876615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档