JQuery и Google Maps JSON ответ - PullRequest
6 голосов
/ 14 апреля 2011

У меня проблемы с получением информации о географическом местоположении из Google Maps API

Код довольно прост

$.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");
}

Я всегда получаю сообщение об ошибке.Я тоже пытался напрямую (где-то читал, что обратный вызов должен быть установлен в конце ...

$.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.");
    }
});

URL запроса сформирован правильно:

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

и это дает мне правильный JSON

, пожалуйста, сообщите!

Вы можете "играть" с ним на http://jsfiddle.net/PNad9/

Ответы [ 4 ]

3 голосов
/ 15 апреля 2011

, если это кому-то помогает ... Я сдался и полностью изменил саму логику, и теперь он работает как положено:

сначала я добавил google maps js в тело

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 );

Как вы можете видеть, я указал функцию обратного вызова get_longlat ...

, поэтому я определил эту функцию и использовал объект геокода 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);
            }
        });
    }
}

Переменные США внутри - это наше собственное пространство имен для НАСТРОЙКИ ПОЛЬЗОВАТЕЛЯ

надеюсь, это кому-нибудь поможет

1 голос
/ 01 мая 2011

Вот хороший пост о том, почему вы испытывали поведение из исходного вопроса.URL, по которому вы отправляете запрос в Google (http://maps.googleapis.com/maps/api/geocode/json), не возвращает анализируемый ответ jsonp, он просто возвращает необработанный объект JSON. Google отказывается заключать JSON в предоставленный обратный вызов.

Исправлениедля этого, более или менее, я могу сделать запрос по этому URL-адресу: http://maps.google.com/maps/geo и включить ключ API Карт Google в свой запрос. Также, как представляется, необходимо обеспечить, чтобыПараметр обратного вызова в запросе является последним параметром строки запроса.

Вот jsfiddle анализируемого ответа от службы (даже если он возвращает ошибку, поскольку не предоставлен действительный ключ API Карт Google):http://jsfiddle.net/sCa33/

Другой вариант - сделать то, что вы уже сделали, и использовать объект Geocoder от Google для запуска запроса.

0 голосов
/ 26 апреля 2016
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);
                }
            });
0 голосов
/ 14 апреля 2011

Я посмотрел на проблему, но не могу понять, что происходит.Одна вещь, которую я обнаружил, заключалась в том, что, если я добавляю параметр данных к ошибке, а затем выдаю предупреждение (data.status), он дает код 200. Единственное место, где я мог найти это, было преобразовать его в код успеха для v2?!

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

Также я не уверен, что вы можете использовать этот jsonp, потому что при чтении документации кажется, что в строку запроса добавляются дополнительные параметры?Когда я удалил его с помощью jsonpcallback и изменил тип данных на json, код ответа начал показывать 0.

Не сильно помогите, извините, но я должен идти на работу сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...