为什么我得到' undefined'什么时候尝试从Public API中提取特定数据?以下代码有什么问题?
<body>
<button type="button" onclick="gget();">Click</button>
<p id="MyDiv"> </p> </body>
<script>function gget(){
var btc = new XMLHttpRequest();
btc.open('GET', "https://api.coinmarketcap.com/v1/ticker/bitcoin/", true);
btc.onreadystatechange = function() {
if(btc.readyState == 4) {
var data = JSON.parse(btc.responseText);
var price = data.id;
document.getElementById('MyDiv').innerHTML = "$"+price;
}};
btc.send();
} </script>
答案 0 :(得分:0)
https://api.coinmarketcap.com/v1/ticker/bitcoin/返回一个包含1个对象的数组。
您想访问data[0].id
以访问该第一个/唯一元素的ID。您正在寻找的价格可能是data[0].price_usd
。
答案 1 :(得分:0)
要添加到Jeto的答案,代码看起来像这样,假设您想要以美元为单位的价格。
function gget(){
var btc = new XMLHttpRequest();
btc.open('GET', "https://api.coinmarketcap.com/v1/ticker/bitcoin/", true);
btc.onreadystatechange = function() {
if(btc.readyState == 4) {
var data = JSON.parse(btc.responseText);
var price = data[0].price_usd;
document.getElementById('MyDiv').innerHTML = "$"+price;
}};
btc.send();
}
此外,您可以在错误情况下向用户提供反馈。
function setPriceLabel(value){
document.getElementById('MyDiv').innerHTML = value;
}
function gget(){
var btc = new XMLHttpRequest();
btc.addEventListener("error", function(){
setPriceLabel("Could not fetch price from server");
});
btc.open('GET', "https://api.coinmarketcap.com/v1/ticker/bitcoin/", true);
btc.onreadystatechange = function() {
if(btc.readyState == 4) {
try{
var data = JSON.parse(btc.responseText);
console.log(data)
var price = data[0].price_usd;
setPriceLabel("$"+price);
}
catch(e){
setPriceLabel("Server sent bad data");
}
}};
btc.send();
}
btc.addEventListener
块将捕获HTTP错误并将价格标签设置为错误消息。
除了HTTP错误之外,JSON解析函数也可能失败。由于JSON.parse
是一个同步函数,我们可以使用try-catch语法处理它的错误。