Google Elevation API с AJAX?
Я пытаюсь использовать Google Elevation API с функцией getJSON в JQuery.
Я использую этот код, который использует JSONP:
jQuery.getJSON("http://maps.googleapis.com/maps/api/elevation/json?locations=23.444,45.4545&sensor=false&jsoncallback=?", function(json){
alert("a");
});
В Firebug я вижу, что запрос GET отправляется правильно, и я получаю правильный ответ от Google:
{
"status": "OK",
"results": [ {
"location": {
"lat": 23.4440000,
"lng": 45.4545000
},
"elevation": 816.7996216
} ]
}
Однако я никогда не предупреждаю и получаю эту ошибку от Firebug:
invalid label
"status": "OK",\n
Я использую Google Maps API v2, поэтому я использую встроенный метод.
Есть ли способ получить повышение с помощью API Google Elevation через запрос AJAX и без создания прокси?
Спасибо за вашу помощь.
Вениамин
4 ответа
API Google возвышения не поддерживает JSONP (спасибо Ник Крэйвер за объяснение), и я не могу использовать ElevationService, который доступен только для API Карт Google версии 3.
Поэтому я решил использовать другой веб-сервис, чтобы получить повышение:
http://www.geonames.org/export/web-services.html
пример: http://ws.geonames.org/astergdemJSON?lat=X&lng=Y&callback=?
Этот веб-сервис поддерживает JSONP, поэтому его легко использовать с JQuery и методом getJSON.
Вениамин
Этот API не поддерживает JSONP, он возвращает только JSON... так что да, вам понадобится прокси в этом случае.
Чтобы было ясно, правильный ответ будет выглядеть так:
someFunction({
"status": "OK",
"results": [ {
"location": {
"lat": 23.4440000,
"lng": 45.4545000
},
"elevation": 816.7996216
} ]
})
JQuery заменяет callback=?
с callback=someFunction
, но Google не использует этот параметр, так как этот сервис не поддерживает JSONP... поэтому проблема в том, что вы эффективно делаете это:
<script type="text/javascript">
{
"status": "OK",
"results": [ {
"location": {
"lat": 23.4440000,
"lng": 45.4545000
},
"elevation": 816.7996216
} ]
}
</script>
Это приводит к ошибке, так как это неверный JavaScript... вы получаете недопустимую ошибку метки. Если бы там была функция-обертка, она была бы действительной и выполняла бы ту функцию, которую сделала jQuery (из вашего success
Перезвоните).
Вы должны использовать класс ElevationService G̶e̶o̶L̶o̶c̶a̶t̶i̶o̶n̶ из JavaScript API. Там нет необходимости прокси.
http://code.google.com/apis/maps/documentation/javascript/reference.html
Как сказал @Chris Broadfoot, в API v3 для этого есть специальный класс. Лучший пример здесь https://developers.google.com/maps/documentation/javascript/elevation Вам не нужно иметь дело ни с JSONP, ни с другими сервисами.