2011-04-14 32 views
5

estoy teniendo problema para conseguir información de ubicación geográfica de las API de Google MapsjQuery y Google Maps respuesta JSON

el código es bastante sencillo

$.ajax({ 
    type: "GET", 
    cache: false, 
    url: "http://maps.googleapis.com/maps/api/geocode/json", 
    dataType: "jsonp", 
    data: { 
     address: "Ljubljana " + "Slovenia", 
     sensor: "false" 
    }, 
    jsonpCallback:'json_response', 
    success: function(data) { 
     top.console.debug(data); 
     $('#location_setter').dialog('close'); 
    }, 
    error: function() { 
     alert("Error."); 
    } 
}); 


function json_response(data){ 
    alert("works"); 
} 

Siempre sale un error de vuelta. traté directamente también (he leído en alguna parte que la devolución de llamada se debe establecer al final ...

$.ajax({ 
    type: "GET", 
    cache: true, 
    url: "http://maps.googleapis.com/maps/api/geocode/json?address=Ljubljana Slovenia&sensor=false", 
    dataType: "jsonp", 
    jsonpCallback:'json_response', 
    success: function(data) { 
     top.console.debug(data); 
     $('#location_setter').dialog('close'); 
    }, 
    error: function() { 
     alert("Error."); 
    } 
}); 

la solicitud de URL se formó correctamente:

http://maps.googleapis.com/maps/api/geocode/json?address=Ljubljana%20Slovenia&sensor=false&callback=json_response

y me da la correcta JSON

favor aconsejan!

Usted puede 'jugar' con él en http://jsfiddle.net/PNad9/

Respuesta

2

si ayuda a alguien ... me di por vencido y cambiar por completo la lógica misma y ahora funciona como se espera:

principio adjunta JavaScript de Google Maps en el cuerpo

var script = document.createElement('script'); 
     script.type = 'text/javascript'; 
     script.src = 'http://maps.google.com/maps/api/js?sensor=false&callback=get_longlat'; 
     $("body").append(script); 

como usted puede ver que se especifica la función de devolución de get_longlat ...

lo que define esta función y se usa objeto de codificación geográfica de Google

function get_longlat(address){ 

var geocoder = new google.maps.Geocoder(); 

if(!address){ 
    var p = US.get("location_postal"); 
    var c = US.get("location_city"); 
    var a = US.get("location_address"); 
    var address = a + ', ' + p + ' ' + c + ', Slovenia'; 
} 

if (geocoder) { 
    geocoder.geocode({ 'address': address }, function (results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      US.set("location_lat", results[0].geometry.location.lat(), 60); 
      US.set("location_lon", results[0].geometry.location.lng(), 60); 

      $('#location_setter').dialog('close'); 
     } 
     else { 
      console.log('No results found: ' + status); 
     } 
    }); 
} 

}

Las variables en el interior de los Estados Unidos es nuestro propio espacio de nombres para AJUSTES DE USUARIO

espero que ayude a alguien

+0

Gracias amigo, esto me ahorra un montón de tiempo. – Jack

0

He echado un vistazo al problema, pero no puedo entender qué está pasando. Una cosa que encontré fue que si agrego un parámetro de datos al error y luego alerta (data.status), se obtiene el código 200. ¡El único lugar donde pude encontrar esto fue resolverlo con el código de éxito para v2 ?!

error: function(data) { 
    alert(data.status); 
} 

Además no estoy seguro de que se puede utilizar jsonp ya que la lectura de los textos que parece poner parametros adicionales en la cadena de consulta? Cuando lo eliminé, jsonpcallback y cambié el tipo de datos a json, el código de respuesta comenzó diciendo 0.

No hay mucha ayuda, lo siento, pero tengo que ir a trabajar ahora.

1

Here is a good post sobre por qué usted experimentaba el comportamiento de la pregunta original. La URL a la que realiza la solicitud a google en (http://maps.googleapis.com/maps/api/geocode/json) no devuelve una respuesta parseable jsonp, simplemente devuelve un objeto JSON sin formato. Google se niega a envolver el JSON en la devolución de llamada proporcionada.

La solución para esto, más o menos de lo que puedo decir, es hacer su solicitud a esta URL: http://maps.google.com/maps/geo y para incluir una clave de la API de Google Maps en su solicitud. También parece ser necesario garantizar que el parámetro de devolución de llamada en la solicitud sea el último parámetro de la cadena de consulta.

Aquí es una jsFiddle de una respuesta analizable desde el servicio (a pesar de que está volviendo un error porque no hay una clave válida de Google Maps API proporcionada): http://jsfiddle.net/sCa33/

La otra opción es hacer lo que ya tiene hecho, parece, y usa el objeto Geocoder de Google para ejecutar la solicitud.

0
function codeAddress(address, title, imageURL) { 
      console.log(address); 

      geocoder.geocode({'address': address}, function (results, status) { 
       console.log(results); 
       if (status == google.maps.GeocoderStatus.OK) { 
        map.setCenter(results[0].geometry.location); 

         var marker = new google.maps.Marker({ 
          map: map, 
          position: results[0].geometry.location, 
          icon: "", 
          title: title 
         }); 

        /* Set onclick popup */ 
        var infowindow = new google.maps.InfoWindow({content: title}); 
        google.maps.event.addListener(marker, 'click', function() { 
         infowindow.open(marker.get('map'), marker); 
        }); 
       } 
       else if (status === google.maps.GeocoderStatus.OVER_QUERY_LIMIT) { 
        setTimeout(function() { 
         codeAddress(address, title, imageURL); 
        }, 250); 
       } else { 
        alert("Geocode was not successful for the following reason: " + status); 
       } 
      });