I am using Google Maps to place Markers onto a Map, using Geocoder to place by address. The Markers are all placed correctly on the map, but the infowindow on each is always using the same message instead of the one relevant to that marker.
I have tried doing it a few different ways now, but always with the same result. The code I have currently is below, which is inside the Initialize function:
var locations = [
['Message 1', -33.890542, 151.274856, 4, 'leeds'],
['Message 2', -33.923036, 151.259052, 5 , 'manchester'],
['Message 3', -34.028249, 151.157507, 3 , 'london'],
['Message 4', -33.80010128657071, 151.28747820854187, 2, 'newcastle'],
['Message 5', -33.950198, 151.259302, 1, 'birmingham']
];
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
if (geocoder) {
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (status != google.maps.GeocoderStatus.ZERO_RESULTS) {
map.setCenter(results[0].geometry.location);
var infowindow = new google.maps.InfoWindow();
var image = {
url: 'assets/img/banners/404.png',
// This marker is 20 pixels wide by 32 pixels tall.
size: new google.maps.Size(20, 32),
// The origin for this image is 0,0.
origin: new google.maps.Point(0,0),
// The anchor for this image is the base of the flagpole at 0,32.
anchor: new google.maps.Point(0, 32)
};
var marker;
for (var x = 0; x < locations.length; x++) {
infowindow = new google.maps.InfoWindow({content:locations[x][0]});
$.getJSON('http://maps.googleapis.com/maps/api/geocode/json?address='+locations[x][4]+'&sensor=false', locations, function (data) {
var p = data.results[0].geometry.location
var latlng = new google.maps.LatLng(p.lat, p.lng);
marker = new google.maps.Marker({
position: latlng,
map: map
});
google.maps.event.addListener(marker, 'click', (function(marker, x) {
return function() {
infowindow.open(map, this);
}
})(marker, x));
});
}
} else {
alert("No results found");
}
} else {
alert("Geocode was not successful for the following reason: " + status);
}
});
}