我试图在地图上放置一个标记,然后使用该标记的位置绘制一些多边形。但是,marker.getPosition()似乎最初不返回值。我需要再次调用该函数来获取前一个标记位置。有没有人有任何关于为什么这是
的建议function codeAddress() {
var address = fubar;
geocoder.geocode( { 'address': address}, function(results, status) {
map.setCenter(results[0].geometry.location);
map.setZoom(1);
if (marker == null){
marker = new google.maps.Marker({
map: map,
});
}
marker.setPosition(results[0].geometry.location);
});
document.write(marker.getPosition()); //this displays nothing
}
答案 0 :(得分:4)
Google地图正在使用回调(see parameter 2 in the documentation),因为其not synchronous。 function(results,status)
位是神奇发生的地方。它是在Google对地址进行地理编码时运行的。直到你没有任何东西可以展示。
试试这个:
function codeAddress() {
var address = fubar;
geocoder.geocode( { 'address': address}, function(results, status) {
map.setCenter(results[0].geometry.location);
map.setZoom(1);
if (marker == null){
marker = new google.maps.Marker({
map: map,
});
}
marker.setPosition(results[0].geometry.location);
alert("Alert 1");
alert(marker.getPosition());
});
alert("Alert 2");
}
您会在alert("Alert 2")
alert("Alert 1")
出现
答案 1 :(得分:1)
您可以利用$ .Deferred()
function codeAddress() {
var address = fubar;
var d = $.Deferred();
var marker;
geocoder.geocode( { 'address': address}, function(results, status) {
map.setCenter(results[0].geometry.location);
map.setZoom(1);
if (marker == null){
marker = new google.maps.Marker({
map: map,
});
}
marker.setPosition(results[0].geometry.location);
d.resolve();
});
d.done(function(){
document.write(marker.getPosition());
});
}