填充时显示0长度的Javascript数组

时间:2010-12-12 19:50:59

标签: javascript arrays loops

我确信这很简单,但我没有太多运气搞清楚是什么问题。我正在创建一个空数组(位置),在getPartnerLocations函数中填充位置对象,然后尝试使用drop函数在地图上绘制位置。我遇到的问题是在drop函数内部,其中包含东西的locations数组返回的长度为零,因此循环不起作用。关于这里发生的事情的任何提示或想法将不胜感激。

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(); 

1 个答案:

答案 0 :(得分:2)

geocode是一个异步函数。

在之后调用drop之后,回调才会执行 因此,当您调用drop时,数组仍为空。

您需要在initialize回调中的最后一次AJAX通话回复后拨打dropgeocode