2010-12-12 11 views
0

これは本当にシンプルだと確信していますが、何が間違っているのか分かりませんでした。空の配列(場所)を作成して、getPartnerLocations関数内の場所オブジェクトで埋めて、drop関数を使用して地図上の場所をプロットしようとしています。私が抱えている問題は、drop関数の中で、その中にあるものがある長さの配列がゼロの長さを返しているので、ループが機能していないということです。ここで何が起こっているかについてのヒントやアイデアがあれば幸いです。埋め込まれたときに0の長さを示すJavaScript配列

var markers = []; 
var locations = []; 
var iterator = 0; 
var map; 
var geocoder; 
var newYork = new google.maps.LatLng(40.7143528, -74.0059731); 


    function initialize() { 
    var mapOptions = { 
     zoom: 12, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
     center: newYork 
    }; 

    map = new google.maps.Map(document.getElementById("map_canvas"),mapOptions); 

    } 

    function getPartnerLocations() { 
     geocoder = new google.maps.Geocoder();  
     $('.partner').each(function(index){ 

      var street = $('.partner-streetaddress',this).text(); 
      var city = $('.partner-city',this).text(); 
      var state = $('.partner-state',this).text(); 
      var country = $('.partner-country',this).text(); 

      var address = street + ', ' + city + ', ' + state + ', ' + country; 

      geocoder.geocode({ 'address': address}, function(results, status) 
      { 

       if (status == google.maps.GeocoderStatus.OK) 
       { 
        locations.push(results[0].geometry.location); 
        console.log(locations[index]); 
       } 
       else 
       { 
        console.log('failed to geocode address: ' + address); 
       } 
      }); 

     }); 
     initialize(); 
     drop(); 
    } 

    function addMarker() { 
    console.log('add marker function'); 
    markers.push(new google.maps.Marker({ 
     position: locations[iterator], 
     map: map, 
     draggable: false, 
     animation: google.maps.Animation.DROP 
    })); 
    iterator++; 
    } 

    function drop() 
    { 
    console.log(locations.length); 
    for (var i = 0; i < locations.length; i++) { 
     setTimeout(function() { 
     addMarker(); 
     }, i * 200); 
    } 
    } 

getPartnerLocations(); 
+0

http://jsfiddle.net/でデモを削除することは可能ですか? –

答えて

2

geocodeは、非同期機能です。

の後にコールバックは実行されません。の後にdropとコールします。
したがって、dropを呼び出すと、配列はまだ空です。

geocodeコールバックで、最後のAJAXコール応答後にinitializedropに電話する必要があります。

関連する問題