我正在尝试通过api提取传递url变量,但无法返回任何结果。谢谢,我是Java的新手。
//Get IP address
fetch('https://extreme-ip-lookup.com/json/')
.then((eip) => {
return eip.json();
}).then((eip) => {
document.getElementById('ip').value = eip.query;
var myip = document.getElementById('ip').value;
var url = "https://api.pray.zone/v2/times/today.json?ip=" + myip;
})
//Get City
fetch(url)
.then((res) => {
return res.json();
}).then((res) => {
document.getElementById('city').value = res.results.location.city;
})
我可以获取IP地址,但不能获取城市。
答案 0 :(得分:2)
url
仅在.then
回调内部可见,当您第二次调用fetch
时甚至不存在。
呼叫那里的第二个fetch
并返回fetch
返回的承诺,以便您可以正确地链接它们:
//Get IP address
fetch('https://extreme-ip-lookup.com/json/')
.then((eip) => {
return eip.json();
})
.then((eip) => {
document.getElementById('ip').value = eip.query;
var myip = document.getElementById('ip').value;
return fetch("https://api.pray.zone/v2/times/today.json?ip=" + myip);
})
//Get City
.then((res) => {
return res.json();
})
.then((res) => {
document.getElementById('city').value = res.results.location.city;
})
相关:Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference
答案 1 :(得分:0)
您的代码异步运行,并且您在获取URL之前调用提取。
//Get IP address
fetch('https://extreme-ip-lookup.com/json/')
.then((eip) => {
return eip.json();
}).then((eip) => {
document.getElementById('ip').value = eip.query;
var myip = document.getElementById('ip').value;
var url = "https://api.pray.zone/v2/times/today.json?ip=" + myip;
fetch(url)
.then((res) => {
return res.json();
}).then((res) => {
document.getElementById('city').value = res.results.location.city;
})
});
答案 2 :(得分:0)
url变量不在范围内,因此实际上您要将undefined传递给第二个访存...您可以轻松地将第二个访存放在第一个访存的关闭之前,也可以在第一个访存之外定义url variabl,也许将其分配给空字符串,然后分配url值,或在构建它之后分配URL,然后关闭第一个提取。那就是如果您想使获取API保持现在的状态