Функция, возвращающая неопределенное в геокодере - PullRequest
3 голосов
/ 01 ноября 2011

Я использую геокодер Google maps v3, чтобы геокодировать адрес, а затем передать 2 координаты из файла jQuery в файл PHP, используя getJSON.

Проблема: Однако я заметил, что функция, выполняющая функцию геокодирования, продолжает возвращать неопределенное значение!Таким образом, PHP-файл получает неопределенную переменную.Где я ошибся?

Код jQuery

var search_latlng = geocodeAddress(search_location);
console.log(search_latlng);

$.getJSON('/main/get_places', {search_location: search_latlng}, function(json){
        $("#result_listing").html('');
 .
 .
 .

Функция геокодера JS

function geocodeAddress(address) {

    var latlng = new Array(2);

    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            latlng[0] = results[0].geometry.location.lat();
            latlng[1] = results[0].geometry.location.lng();
            return latlng;
        } else {
            console.log("Geocode was not successful for the following reason: " + status);
        }
    });
}

1 Ответ

4 голосов
/ 01 ноября 2011

Невозможно вернуть значение из этой функции через обратный вызов в код Google.Это не имеет никакого смысла;функция "geocode ()" асинхронная .Внешняя функция вернется к тому времени, когда ваш обратный вызов будет запущен.

Правильный способ сделать это - подражать самому API Google: дать вашей функции параметр обратного вызова и выполнить оттуда свою "последующую" работу:

function geocodeAddress(address, callback) {

    var latlng = new Array(2);

    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            latlng[0] = results[0].geometry.location.lat();
            latlng[1] = results[0].geometry.location.lng();
            callback(latlng); // call the callback function here
        } else {
            console.log("Geocode was not successful for the following reason: " + status);
        }
    });
}

edit - как пример того, как вы будете использовать это:

geocodeAddress(search_location, function(search_latlng) {
  console.log(search_latlng);
  $.getJSON('/main/get_places', {search_location: search_latlng}, function(json){
    $("#result_listing").html('');
    // ...
  });
});

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

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