2014-02-10 5 views
1

Это мой первый пост. Я полностью застрял и могу использовать некоторую помощь с добавлением infoWindows в Google Maps. Данные, которые я намереваюсь использовать (НЕ API, который я использовал здесь), не имеют lat/lon и имеют несколько значений.Google Maps: Передача дополнительных аргументов в GeoCoder для InfoWindows

Все в порядке до infoWindow, но я не могу передать никаких других аргументов в обратный вызов geocoder. Заранее спасибо за помощь!

Кредит отправляется в Минхуэй Юй: http://goo.gl/zvAKZ8. Шахта использует разные данные для инфоиндуста и будет иметь около 30 маркеров.

Вот соответствующий код JS FIDDLE:

var map = new google.maps.Map(document.getElementById('map'), { 
    zoom: 3, 
    center: new google.maps.LatLng(0, 0), 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
}); 
var infowindow = new google.maps.InfoWindow(); 
var marker; 
var i; 
var mapData; 
var locations = []; 

$(document).ready(function() { 
    $.ajax({ 
    url: 'http://api.openweathermap.org/data/2.5/weather?q=London,uk', 
     async: false, 
     success: function (mapData) { 
     locations.push(mapData.name); 
    } 

}); 
    initialize(); 
}); 

function initialize() { 
    setMarkers(map, locations); 
} 

function setMarkers(map, address) { 
    for (var i = 0; i < address.length; i++) { 
     setMarker(map, address[i]) 
    } 
} 

function setMarker(map, address) { 
    geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({ 
     'address': address 
    }, 

    function (results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      map.setCenter(results[0].geometry.location); 
      var marker = new google.maps.Marker({ 
       position: results[0].geometry.location, 
       map: map 
      }); 
      google.maps.event.addListener(marker, 
       "click", function() { 

        //HAVING THE PROBLEM HERE. Not sure how to separate this from the callback. 
        infowindow.setContent(mapData.main.temp); 
        // But this works if you run it: 
       //infowindow.setContent(address); 

       infowindow.open(map, marker); 
      }); 
     } else { 
      alert("Geocode was not successful for the following reason: " + status); 
     } 

    }); 
} 

ответ

0

Вы имеете объявить MyData как глобальные переменные.

Но здесь у вас есть mapData в качестве параметра обратного вызова ajax.

$(document).ready(function() { 
    $.ajax({ 
    url: 'http://api.openweathermap.org/data/2.5/weather?q=London,uk', 
     async: false, 
     success: function (mapData) { //locally scoped which can't override 
     locations.push(mapData.name);     
     } 
}); 

Это не будет отменять глобальную переменную.

Вместо этого сделать, как

var gmapData = {}; 

и использовать его как

$(document).ready(function() { 
    $.ajax({ 
    url: 'http://api.openweathermap.org/data/2.5/weather?q=London,uk', 
     async: false, 
     success: function (mapData) { 
     locations.push(mapData.name);    
     gmapData = mapData; //assign mapData to global variable 
     } 
}); 

Теперь использовать в infoWindow

google.maps.event.addListener(marker, "click", function() { 
      //infowindow.setContent() will accept only string 
      //whereas temp is numeric, so convert to string     
     infowindow.setContent(gmapData.main.temp.toString()); 
     infowindow.open(map, marker); 
}); 

JSFiddle

+1

Спасибо! Он работал очень хорошо. – secondbreakfast

Смежные вопросы