2017-05-09 13 views
0

私は以下のjavascriptコードを使用していますが、これは特定の場所のジオイドを返します。私は、CORSプラグインを使用してChromiumブラウザでテストしました。それはIDを取得しますが、私は関数の外から値に到達することができません。javascript関数内でresponseXML値を返すことができません

私は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 

答えて

0

あなたは 'mylocation'変数を正しく挿入していません。あなたは現在、文字列の一部としてそれを持っています。

使用ではなく、この:

xhttp.open("GET", "http://api.geonames.org/search?q=" + mylocation + "&username=kennsully", true); 

、あなたの 'MyFunctionの' 関数にパス 'responseText':

if (this.readyState == 4 && this.status == 200) { 
    var res = this.responseText; 
    myFunction(res); 
} 
+0

、私はそれを試してみましたが、何もに、パス 'responseText' また – kenn

+0

を変更していないあなたの " myFunction '関数です。私は私の答えを更新しました。 –

関連する問題