2015-05-29 13 views
5

Próbuję uzyskać city z Geolocation API. Właśnie rozpocząłem naukę JS i jQuery, więc może to być podstawowy błąd.Geolokalizacja - jak zdobyć miasto od długiego i latkiego

$(document).ready(function(){ 
    function displayLocation(latitude,longitude){ 
     var request = new XMLHttpRequest(); 

     var method = 'GET'; 
     var url = 
      'http://maps.googleapis.com/maps/api/geocode/json?latlng=' 
      + latitude + ',' + longitude + '&sensor=true'; 
     var async = true; 

     request.open(method, url, async); 
     request.onreadystatechange = function(){ 
      if(request.readyState == 4 && request.status == 200){ 
       var data = JSON.parse(request.responseText); 
       var address = data.results[0]; 
       alert(address.city.short_name); 
      } 
     }; 
     request.send(); 
    }; 

    var successCallback = function(position){ 
     var x = position.coords.latitude; 
     var y = position.coords.longitude; 
     displayLocation(x,y); 
    }; 

    navigator.geolocation.getCurrentPosition(successCallback); 
}); 
+0

Co robi Twój kod faktycznie produkują? – pete23

+0

Błąd w konsoli internetowych narzędzi dev: TypeError: address.city jest niezdefiniowany Kiedy zmieni się alert: alert (address.formatted_address); zwraca cały sformatowany adres, ale potrzebuję tylko nazwy miasta – coder2222

+0

podkreślił kluczowe punkty – Nullify

Odpowiedz

1

To powinno pomóc

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
<script> 
    $(document).ready(function(){ 
     function displayLocation(latitude,longitude){ 
     var request = new XMLHttpRequest(); 

     var method = 'GET'; 
     var url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='+latitude+','+longitude+'&sensor=true'; 
     var async = true; 

     request.open(method, url, async); 
     request.onreadystatechange = function(){ 
     if(request.readyState == 4 && request.status == 200){ 
     var data = JSON.parse(request.responseText); 
     alert(request.responseText); // check under which type your city is stored, later comment this line 
     var addressComponents = data.results[0].address_components; 
     for(i=0;i<addressComponents.length;i++){ 
      var types = addressComponents[i].types 
      //alert(types); 
      if(types=="locality,political"){ 
       alert(addressComponents[i].long_name); // this should be your city, depending on where you are 
      } 
      } 
     //alert(address.city.short_name); 
     } 
    }; 
    request.send(); 
}; 

var successCallback = function(position){ 
var x = position.coords.latitude; 
var y = position.coords.longitude; 
displayLocation(x,y); 
    }; 


navigator.geolocation.getCurrentPosition(successCallback); 

    }); 
</script> 
+0

Dzięki, ale najpierw wyświetla listę (prawdopodobnie) każdej możliwej wartości lokalizacji i po kliknięciu "Ok" pokazuje Miasto. Czy to z powodu pętli for? – coder2222

+0

Przepraszam, przeczytaj uważnie kod i zauważyłem, że wskazałeś na linię, którą musisz skomentować! Działa dobrze, dzięki! – coder2222