2017-08-17 7 views
-1

私はこのコードを持っています。私は配列内で参照する必要がありますyオブジェクトは、forステートメント(増減)内で割り当てられます。最初のconsole.logには配列が更新されているのが見えますが、2番目のものは空です。配列はJavaScriptで更新されていません

function myfunction() { 
var y = new Array(2); 
    $.getJSON('../docs/natures.json', function(data) { 
     var nature = document.getElementById("nature").value; 
     for(var i = 0; i< data.natures.length; i++) 
     { 
      var x = data.natures[i]; 
      if((nature.localeCompare(x.name)) == 0) 
      { 
       y=[x.increase]; 
       console.log(y[0]); 
       y.push(x.decrease); 
       console.log(y[1]); 
       break; 
      } 
     } 
     console.log(y); <!- first -> 
    }); 
console.log(y); <!- second -> 
} 

私のJSONファイルは、このようなものです:

{"natures":[ 
{ 
"name":"some name", 
"increase": "some increase", 
"decrease": "some decrease" 
}, 
{...} 
]} 

My results in the console

+0

可能な複製に発生する[なぜ私の変数は、私は、関数の内部でそれを変更した後に変更されていないのですか? - 非同期コードリファレンス](https://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) – Xufox

答えて

1

jQuery.getJSONは非同期、それに渡されたコールバック関数の要求が完了したときにのみ実行されますです。

console.log(y); <!- second -> 

前のこと

+0

どうすれば私は自分の問題を解決します。なぜなら、私の関数では非同期の値が必要です。 –

+0

@SantiagoRobayoは、コールバック関数内で表示または計算したいものを何でも持っています – forJ

関連する問題