【问题标题】:Javascript array showing 0 length when populatedJavascript 数组在填充时显示 0 长度
【发布时间】:2010-12-12 19:50:59
【问题描述】:

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

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

【问题讨论】:

标签: javascript arrays loops


【解决方案1】:

geocode 是一个异步函数。

回调直到您调用drop之后的某个时间才会执行。
所以,当你调用drop时,数组还是空的。

您需要在最后一次 AJAX 调用回复后,在 geocode 回调中调用 initializedrop

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 2023-03-06
    • 2015-07-24
    • 2017-03-29
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    相关资源
    最近更新 更多