我有以下javascript代码,据说可以返回给定位置的大地水准面。我使用CORS插件在Chromium浏览器中测试了它。它检索ID但我无法从函数外部获取值。
我是javascript的新用户,但我在发布问题之前阅读了link1,link2并进行了搜索。
以下是fiddle
我错过了什么?
编辑:感谢版主,他们将我的问题重定向到了正确的轨道上。 那么如何修复我的代码以绕过异步调用呢?var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
myFunction(xhttp);
}
};
var mylocation = 'istanbul'
xhttp.open("GET", "http://api.geonames.org/search?q= + mylocation + &username=kennsully", true);
xhttp.send();
function myFunction(arg) {
var xmlDoc = arg.responseXML;
var geoid = xmlDoc.getElementsByTagName("geonameId")[1].childNodes[0].nodeValue;
// document.write(geoid); // when uncommented it prints the id 891501
// console.log(geoid);
return geoid;
};
var geoid = myFunction();
console.log(geoid);// <= Uncaught TypeError: Cannot read property 'responseXML' of undefined
at myFunction
答案 0 :(得分:0)
您没有插入&#39; mylocation&#39;变量正确。您目前将其作为字符串的一部分。
请改用:
xhttp.open("GET", "http://api.geonames.org/search?q=" + mylocation + "&username=kennsully", true);
另外,传递&#39; responseText&#39;到你的myFunction&#39;功能:
if (this.readyState == 4 && this.status == 200) {
var res = this.responseText;
myFunction(res);
}