2011-08-04 16 views
1
  var events = <?php echo $sf_data->getRaw('jsonData'); ?>;//some perfecly fine json 
      var locations = new Array(); 
      var geocoder = new google.maps.Geocoder(); 
      $(events).each(function(i,e){ 
       geocoder.geocode({address: e.place},function(results,statusCode){ 
        locations[e.id] = results[0].geometry.location; 
       }) 
      }) 
      alert(locations.length); 

さて、質問は簡単です。 の位置の配列をクロージャの内側に変更するにはどうすればよいですか? この警告はを示しています。クロージャ内のグローバル変数にアクセスする方法は? (Javascript)

+0

あなたはあなたとまったく同じ方法でアクセスします。しかし、 'each()'の前に 'events'を定義することはありません。私はより多くのコードが必要だと思います... – JAAulde

+0

firebugの 'console.log'を使うと、デバッグする方がはるかに優れています。 – zzzzBov

答えて

4

locationsを非同期に変更したため、アラートが表示されます。あなたがlocationsを変更する匿名関数はと呼ばれ、後でと表示されます。

+0

'geocoder.geocode()'は非同期ですか?そうでない場合、このポストされた例では非同期コードは見えません。 (私はGoogle Maps APIについて何も知らない) – JAAulde

+0

しかし、ジオコードは。 – bjornd

+0

ああ、ok。さて、あなたは絶対に正しいです。 +1 – JAAulde

関連する問題