通过访存api传递url变量

时间:2019-02-14 21:50:07

标签: javascript json

我正在尝试通过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地址,但不能获取城市。

3 个答案:

答案 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保持现在的状态