Google maps api 3 谷歌地图地理编码并在2个循环中附加一个div地理编码

Google maps api 3 谷歌地图地理编码并在2个循环中附加一个div地理编码,google-maps-api-3,maps,geocode,google-geocoder,Google Maps Api 3,Maps,Geocode,Google Geocoder,我完全迷路了。 我有我的html表单,在那里我可以写一个城市。 发送表单时,将在每个循环中发送一个数据数组,下面是代码: geocoder = new google.maps.Geocoder(); $.each(data['list'],function(i,el) { var address = el.address1+','+el.city+' '+el.zipcode; geocoder.geocode( { 'address': address}, function

我完全迷路了。 我有我的html表单,在那里我可以写一个城市。 发送表单时,将在每个循环中发送一个数据数组,下面是代码:

geocoder = new google.maps.Geocoder();

$.each(data['list'],function(i,el)
{
    var address = el.address1+','+el.city+' '+el.zipcode;

    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var getZipCode = $("#zipcode").val();
            var getCity = $("#city").val();

            geocoder.geocode( { 'address': getCity+' '+getZipCode }, function(resultsTwo, statusTwo) {
                if (status == google.maps.GeocoderStatus.OK) {
                    var distanceKm = google.maps.geometry.spherical.computeDistanceBetween(results[0].geometry.location, resultsTwo[0].geometry.location);
                    var distanceMiles = distanceKm/1000*0.621371;
                    str = str +'<article><div class="leftDesc"><header><h3><span class="letter">'+alphabet[i]+'.</span><a href="#" onclick="OpenWindowOnMap(\''+address+'\',\''+el.store_name+'\',\''+el.description+'\');">'+el.store_name+'</a></h3></header>';
                    str = str +'<div class="addressEnonce">Address:</div><div class="addressBig"><p class="address">'+el.address1+'</p>';
                    /*str = str +'<p>'+el.address2+'</p>';*/
                    str = str +'<br /><p class="city">'+el.city+'</p>';
                    str = str +' <p class="zipcode">'+el.zipcode+'</p>';
                    str = str +' <p class="state">'+el.state+'</p></div></div>';
                    str = str +'<div class="rightDesc"><p class="distance">Distance: '+distanceMiles+' Miles</p>';
                    str = str +'<p>'+el.description+'</p></div>';

                    str = str + '<p><a href="#" onclick="OpenWindowOnMap(\''+address+'\',\''+el.store_name+'\',\''+el.description+'\');">Show on Map</a></p>';

                    if((i+1) < data['list'].length){
                        switch(i % 4){
                            case 0:
                                str = str +'<img src="img/line.png" >';
                                break;
                            case 1:
                                str = str +'<img src="img/line.png" >';
                                break;
                            case 2:
                                str = str +'<img src="img/line.png" >';
                                break;
                        }
                    }

                    str = str +'</article>';
                    tweets.append(str);
                }
            });
        }
    });
})                              })
所以代码是好的,对于华盛顿的例子,我将有3个项目显示,也我想有2个!第一项为双1=7


我想问题是我必须放一个回调函数,因为这是地理代码循环中的异步方法,这会造成麻烦。。。但是怎么办

问题在于它是异步的。你需要使用闭包。下面是一个例子:

$.each(data['list'],function(i,el) {
  var address = el.address1+','+el.city+' '+el.zipcode;
  geocoder.geocode( { 'address': address}, (function(address1, city, zipcode) {
      return function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
          geocoder.geocode( { 'address': city+' '+zipcode },
              function(resultsTwo, statusTwo) {
                 // ...                     
          });
        }
      };
  })(el.address1, el.city, el.zipcode));
});