2017-06-06 4 views
-1

関数内で定義した変数を呼び出すことができないのはなぜですか?これは私のコードです...JavaScript:関数の外部で機能しない変数はありますか?

var username; 
    var rank; 
    var steamid; 
    var avatar; 

    var xhr = new XMLHttpRequest(); 

    xhr.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 

     if (this.responseText == "null") { 
     } else { 
      var infoArr = JSON.parse(this.responseText); 
      var username = infoArr.username; 
      var rank = infoArr.rank; 
      var steamid = infoArr.steamid; 
      var avatar = infoArr.avatar; 
      testIt(); 
     } 
    } 
}; 

xhr.open("GET", "../getInfo.php", true); 
xhr.send(); 

function testIt() { 
    alert(username); 
} 

機能testIt()戻っている:未定義

をどのように私のコードはありませんが、JSONエンコードされたページから情報を取得し、変数を作ることです。

+1

コールバック関数の内部では、これらの変数のスコープを 'var'を使ってローカルに設定しています。コールバック関数でusername、rank、steamid、avatarの前からvarを削除します。 – James

+2

私は...もちろんそれは動作しません。 'testIt'はその変数にアクセスできません。 'testIt'に渡すか、単に' testIt'を削除して、そのロジックをコールバックに移すかのどちらかです。 'var'を取り除いてグローバル変数に移動しないでください... –

+0

回答ありがとうございます。今解決された:D – Gogle

答えて

0

関数外の変数を使用する場合は、それらを関数外で定義する必要があります。

var username, rank, steamid, avatar, infoArr, username, rank, steamid, avatar; 

    var xhr = new XMLHttpRequest(); 

    xhr.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 

     if (this.responseText == "null") { 
     } else { 
      infoArr = JSON.parse(this.responseText); 
      username = infoArr.username; 
      rank = infoArr.rank; 
      steamid = infoArr.steamid; 
      avatar = infoArr.avatar; 
      testIt(); 
     } 
    } 
}; 

xhr.open("GET", "../getInfo.php", true); 
xhr.send(); 

function testIt() { 
    alert(username); 
} 
関連する問題