API геокодирования карт Google V3 не возвращает результат в функции javascript

, я пытаюсь использовать API геокодера Google V3, чтобы нанести местоположение на карту на основе адреса, указанного в пользователь, код ниже.

Когда я делаю запрос напрямую (например, на http://maps.googleapis.com/maps/api/geocode/json?address=peterborough&sensor=false ), я получаю ожидаемый ответ.Однако, когда я делаю тот же запрос, используя приведенный ниже код, переменная midpoint всегда не определена после выхода из функции getLatLong .

Что я делаю неправильно?

function loadFromSearch(address) 
{
  midpoint = getLatLong(address);
  mapCentre = midpoint;
  map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
  ...
}


function getLatLong(address) 
{
  var result;
  var url = 'http://maps.googleapis.com/maps/api/geocode/json?address=' + encodeURIComponent(address) + '&sensor=false'
  $.getJSON(url,
  function (data){
     if (data.status == "OK")
     {
        result = data.results[0].geometry.location;
     }
  });
  return result;
}

======================================== ============================================

В свете ответы, я обновил код следующим образом. Я все еще не получаю никакого результата, с точками останова, установленными в Firebug, result = data.results [0] .geometry.location; никогда не попадает.

function loadFromSearch(address) 
{
  midpoint = getLatLong(address, loadWithMidpoint);    
}

function getLatLong(address, callback)
{
   var result;
   var url = 'http://maps.googleapis.com/maps/api/geocode/json?address=' + encodeURIComponent(address) + '&sensor=false'
   $.getJSON(url,{},
   function (data) {
     if (data.status == "OK")
     {
        result = data.results[0].geometry.location;
        callback(result);
     }
   });
}

function loadWithMidpoint(centre)
{
  mapCentre = centre;
  map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
  ...
}

======== ================================================== ===================

Я понял! Окончательный код, который работает, выглядит следующим образом:

function loadFromSearch(coordinates, address)
{
  midpoint = getLatLong(address, latLongCallback);
}

function getLatLong(address, callback)
{
  var geocoder = new google.maps.Geocoder();
  var result = "";
  geocoder.geocode({ 'address': address, 'region': 'uk' }, function (results, status) {
     if (status == google.maps.GeocoderStatus.OK)
     {
        result = results[0].geometry.location;
        latLongCallback(result);
     }
     else
     {
        result = "Unable to find address: " + status;
     }
  });
  return result;
}

function latLongCallback(result)
{
  mapCentre = result;
  map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
  ...
}

5
задан angelcool.net 26 April 2016 в 01:09
поделиться