Google maps API v3 places search - pass in another parameter to callback function

callback, google-maps-api-3, javascript

Solution

How about the following:

service.search(req_bank, function (results, status) {
  locations(results, status, "bank");
});

function locations(results, status, type) {
  if (status == google.maps.places.PlacesServiceStatus.OK) {
    // check the type to determine the marker, or pass a url to the marker icon
  }
}

Problem

I am using the Google Maps places API v3 to return a number of 'types' of places, each represented by a different marker on the map. I create a google.maps.places.PlacesService object, and then call the "search" method once per place type. Each time, I use a different callback function (the second parameter of "search"), because I need to choose a different MarkerImage for each type. ``` var address = "97-99 Bathurst Street, Sydney, 2000"; geocoder.geocode({ 'address': address }, function (results, status) { if (status == google.maps.GeocoderStatus.OK) { var location = results[0].geometry.location; map.setCenter(location); var marker = new google.maps.Marker({ map: map, position: location }); infowindow = new google.maps.InfoWindow(); var service = new google.maps.places.PlacesService(map); // banks var req_bank = { location: location, radius: 500, types: ['bank'] }; service.search(req_bank, banks); // bars var req_bar = { location: location, radius: 500, types: ['bar'] }; service.search(req_bar, bars); // car parks var req_parking = { location: location, radius: 500, types: ['parking'] }; service.search(req_parking, carparks); } else { alert("Geocode was not successful for the following reason: " + status); } }); ``` Here are the callback functions, which differ only by the MarkerImage: ``` function banks(results, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { for (var i = 0; i < results.length; i++) { createMarker(results[i], new google.maps.MarkerImage("/images/bank.png", null, null)); } } } function bars(results, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { for (var i = 0; i < results.length; i++) { createMarker(results[i], new google.maps.MarkerImage("/images/bar.png", null, null)); } } } function carparks(results, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { for (var i = 0; i < results.length; i++) { createMarker(results[i], new google.maps.MarkerImage("/images/parking.png", null, null)); } } } ``` This code works 100%, BUT I would like to avoid duplicating the callback for each different place type (there will be around 10). Is there any way I can pass the marker URL into the callback function? Then I would only need a single callback...

Original source