0

var 地址总是返回未定义的,除非我在两者之间设置了警报。对此的任何建议都会很棒。这是我的代码;我想要做的是从我的 xml 中获取一个地址,将它扔到解码器中,然后在地图上添加一个标记。

var lat1;
var lng1;
var adres;
function parseLocation(callback){
  var geocoder = new google.maps.Geocoder();
  //convert location into longitude and latitude
   var addresses = adres;
  if (geocoder) {
  geocoder.geocode( {
    'address': addresses
  }, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
      lat1 = results[0].geometry.location.lat();
      lng1 = results[0].geometry.location.lng();
      if( typeof callback == 'function' ) {
              callback();
            }
    }         
  });
  }
}
parseLocation(function(){
$('#map_canvas').bind('init', function() {
        $('#map_canvas').gmap('addMarker', {
          'position':  lat1+','+lng1
        }).click(function() {
          $('#map_canvas').gmap('openInfoWindow', {
            'content': lat1+','+lng1
          }, this);

        });
      });
})
function getdetails(artist){
  $.ajax({
    type: "GET",
    url: "data/concerts.xml",
    async: false,
    dataType: "xml",
    success: function(xml){
      $(xml).find("concert").filter(function(){
        return $(this).find("artist").text().indexOf(artist) === 0;
      }).each(function(){
        $('#container').append('<div id="tabel"><div id="tabelimage_detail"><img src="'+$(this).find('image').text()+'"alt="articleimage" id="image"/></div>'
        +'<div id="tabelartist_detail">'+$(this).find('artist').text()+'</div>'
        +'<div id="tabellocation_detail">'+$(this).find('location').text()+'</div>'
        +'<div id="tabelurl_detail"><a href="'+$(this).find('url').text()+'">'+$(this).find('url').text()+'</a></div>'
        +'<div id="longreview">'+$(this).find('longreview').text()+'</div>'
        ).trigger('create');
        adres = $(this).find('adres').text();
      })
      parseLocation();
    }
  })
}
4

1 回答 1

2

只需将参数提供给您的回调函数

    if( typeof callback == 'function' ) {
                    callback(lat1, lng1);
                }

并提供回调(当然摆脱全局 lat/lng 变量):

parseLocation(function(lat1, lng1){
$('#map_canvas').bind('init', function() {
                $('#map_canvas').gmap('addMarker', {
                    'position':  lat1+','+lng1
                }).click(function() {
                    $('#map_canvas').gmap('openInfoWindow', {
                        'content': lat1+','+lng1
                    }, this);

                });
            });
});

已更新,完整答案如下

function parseLocation(adres, callback){

    var geocoder = new google.maps.Geocoder();
    //convert location into longitude and latitude
     var addresses = adres;
    if (geocoder) {

    geocoder.geocode( {
        'address': addresses
    }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            lat1 = results[0].geometry.location.lat();
            lng1 = results[0].geometry.location.lng();
            if( typeof callback == 'function' ) {
                            callback(lat1, lng1);
                        }

        }

    });
    }



}

function getdetails(artist){
    $.ajax({
        type: "GET",
        url: "data/concerts.xml",
        async: false,
        dataType: "xml",
        success: function(xml){
            $(xml).find("concert").filter(function(){
                return $(this).find("artist").text().indexOf(artist) === 0;
            }).each(function(){
                $('#container').append('<div id="tabel"><div id="tabelimage_detail"><img src="'+$(this).find('image').text()+'"alt="articleimage" id="image"/></div>'

                    +'<div id="tabelartist_detail">'+$(this).find('artist').text()+'</div>'
                    +'<div id="tabellocation_detail">'+$(this).find('location').text()+'</div>'
                    +'<div id="tabelurl_detail"><a href="'+$(this).find('url').text()+'">'+$(this).find('url').text()+'</a></div>'
                    +'<div id="longreview">'+$(this).find('longreview').text()+'</div>'
                    ).trigger('create');
                        adres = $(this).find('adres').text();

            })

              //parseLocation();
parseLocation(adres, function(lat1, lng1){
$('#map_canvas').bind('init', function() {
                $('#map_canvas').gmap('addMarker', {
                    'position':  lat1+','+lng1
                }).click(function() {
                    $('#map_canvas').gmap('openInfoWindow', {
                        'content': lat1+','+lng1
                    }, this);

                });
            });
})


        }
    })
}
于 2012-05-21T13:15:09.740 回答