在Google地图中创建多个单独的信息窗口以及多个标记

时间:2013-04-08 16:21:00

标签: google-maps-api-3 xml-parsing ebay infowindow

我知道这个已经在这个论坛上发布了一百次,但在查看了Stack Overflow和Google上的多个解决方案后,我仍然完全陷入困境!

我的项目搜索eBay API(使用PHP并返回simpleXML)并返回多个项目的邮政编码(目前为5个)。然后使用此信息在我的网站上的Google地图上绘制标记。我想要做的是创建多个信息窗口以及这些标记,这样我也可以从eBay拍卖中返回信息并将其放入信息窗口(链接到拍卖,项目图片等)但我没有运气!我似乎无法在我的循环中获得闭包,并且我不断获取信息窗口中显示的数组中的最后一个邮政编码,而不是实际与该标记相关联的邮政编码(只是为了测试目的而这样做)。

我做错了什么!?任何信息都会有所帮助

这是我目前的代码:

    for (var i = 0; i < msg.length; i++) {
                info = msg[i];
                console.log(info);
                geocoder.geocode( { 'address': msg[i]}, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                var marker = new google.maps.Marker({
                map: map,
                animation: google.maps.Animation.DROP,
                icon: image,
                position: results[0].geometry.location
                })
                    listenMarker(marker);
                    markerBounds.extend(results[0].geometry.location);
                    map.fitBounds(markerBounds);
            } else {
                alert("Geocode was not successful for the following reason: " + status);
            }
        });
    }


});
}

function listenMarker (marker){
    google.maps.event.addListener(marker, 'click', function() {
    infoWindow.setContent(info);
    infoWindow.open(map, this);
});

}

1 个答案:

答案 0 :(得分:1)

您还需要在地理编码器调用上使用函数闭包(未经测试),看起来您的listMarker函数也可能有问题(似乎缺少“info”的定义,如果您依赖关于它的全球价值,这可能是你的问题):

function geocodeAddress(msg)
{
            geocoder.geocode( { 'address': msg}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
            var marker = new google.maps.Marker({
            map: map,
            animation: google.maps.Animation.DROP,
            icon: image,
            position: results[0].geometry.location
            })
                listenMarker(marker, msg);
                markerBounds.extend(results[0].geometry.location);
                map.fitBounds(markerBounds);
        } else {
            alert("Geocode was not successful for the following reason: " + status);
        }
    });
}

for (var i = 0; i < msg.length; i++) {
            info = msg[i];
            console.log(info);
            geocodeAddress(msg[i]);
}

function listenMarker (marker, info){
    google.maps.event.addListener(marker, 'click', function() {
    infoWindow.setContent(info);
    infoWindow.open(map, this);
});