我无法在javascript函数中返回responseXML值

时间:2017-05-09 18:30:26

标签: javascript asynchronous xmlhttprequest

我有以下javascript代码,据说可以返回给定位置的大地水准面。我使用CORS插件在Chromium浏览器中测试了它。它检索ID但我无法从函数外部获取值。

我是javascript的新用户,但我在发布问题之前阅读了link1link2并进行了搜索。

以下是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 

1 个答案:

答案 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);
}