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, ни с другими сервисами.

Другие вопросы по тегам