JS:变量返回未定义,除了之前定义它
Posted
技术标签:
【中文标题】JS:变量返回未定义,除了之前定义它【英文标题】:JS: Variable returning undefined except defining it earlier 【发布时间】:2020-07-25 10:57:36 【问题描述】:我的代码是
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();
我用 python 3 的 http.server 启动了它,它打印了"https://cors-anywhere-ctrack.herokuapp.com/https://tools.keycdn.com/geo.json?host=undefined"
,并且正如预期的那样,获取失败了。经过仔细检查,定义了变量 myIP。我觉得它与异步和等待有关,但我不确定。
【问题讨论】:
如果您使用的是 async/await,那么您的geoloc
函数应声明为 async function geoloc()
。
@lawrence-witt 很抱歉造成混乱。我不确定如何应用 async / await 或是否应该应用。
【参考方案1】:
https://jsfiddle.net/Lyjkzqcf/
您可以在$.getJSON()
方法中调用geoloc()
。请看下面:
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)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
【讨论】:
jsfiddle.net/Lyjkzqcf 没有错误,你需要使函数异步@MilkyDeveloper 嗯。它可以在我宝贵的本地主机服务器和 repl / jsfiddle 中运行。谢谢!很惊讶 SO 用户的反应如此之快。【参考方案2】:试试
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)
仅将函数声明为 async
和 await
一次。
【讨论】:
以上是关于JS:变量返回未定义,除了之前定义它的主要内容,如果未能解决你的问题,请参考以下文章