首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JS:变量返回undefined,只是在前面定义了它

JS:变量返回undefined,只是在前面定义了它
EN

Stack Overflow用户
提问于 2020-04-13 05:35:44
回答 2查看 31关注 0票数 1

我的代码是

代码语言:javascript
复制
var api_url

$.getJSON("https://api.ipify.org/?format=json", function(e) {
    myIP = e.ip;
    //api_url = "https://cors-anywhere-ctrack.herokuapp.com/https://tools.keycdn.com/geo.json?host=" + myIP
});

//api_url = "https://cors-anywhere-ctrack.herokuapp.com/https://tools.keycdn.com/geo.json?host=" + myIP

function geoloc() {
  api_url = "https://cors-anywhere-ctrack.herokuapp.com/https://tools.keycdn.com/geo.json?host=" + myIP
  console.log(api_url)
  const response = await fetch(api_url)
  const data = await response.json();
  console.log(data)
}

geoloc();

我用Python3的http.server启动了它,它打印了"https://cors-anywhere-ctrack.herokuapp.com/https://tools.keycdn.com/geo.json?host=undefined",不出所料,获取失败了。经过仔细检查,定义了变量myIP。我觉得这和async和await有关,但我不确定。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-13 05:39:40

https://jsfiddle.net/Lyjkzqcf/

您可以在$.getJSON()方法中调用geoloc()。请看下图:

代码语言:javascript
复制
 var api_url
    
    $.getJSON("https://api.ipify.org/?format=json", function(e) {
        myIP = e.ip;
        geoloc();
        //api_url = "https://cors-anywhere-ctrack.herokuapp.com/https://tools.keycdn.com/geo.json?host=" + myIP
    });
    
    //api_url = "https://cors-anywhere-ctrack.herokuapp.com/https://tools.keycdn.com/geo.json?host=" + myIP
    
    async function geoloc() {
      api_url = "https://cors-anywhere-ctrack.herokuapp.com/https://tools.keycdn.com/geo.json?host=" + myIP
      console.log(api_url)
      const response = await fetch(api_url)
      const data = await response.json();
      console.log(data)
    }
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

票数 1
EN

Stack Overflow用户

发布于 2020-04-13 05:42:50

试一试

代码语言:javascript
复制
async function geoloc() {
  api_url = "https://cors-anywhere-ctrack.herokuapp.com/https://tools.keycdn.com/geo.json?host=" + myIP
  console.log(api_url)
  const response = await fetch(api_url)
  const data = response.json();
  console.log(data)
}

仅将函数声明为asyncawait一次。

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

https://stackoverflow.com/questions/61178480

复制
相关文章

相似问题

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