使用Google Geocode的回调函数

时间:2013-11-17 08:39:27

标签: javascript ajax function asynchronous geocoding

我几个小时以来一直在努力解决这个问题,即使在阅读Stack上的几个例子之后,我也无法让这个工作。我是一个JS新手,这没有任何帮助。

我正在尝试从Google Geocoder API检索有关地址的信息,然后将该对象传递给另一个函数。根据我的阅读,我理解我用来检索信息的函数是异步的,因此我需要使用回调函数来读取它。但是,当我尝试这样做时,我的控制台仍然会返回“未定义”。我知道这些信息来自Google,因为当我在结果对象上使用console.log()时,它会正确返回。

无论如何,这是我正在使用的:

function onSuccess(position) {
  getLocationData(position, function(locationData) {
    console.log(locationData);
  });   
}

function getLocationData(position, callback) {
  geocoder = new google.maps.Geocoder();
  var location = 'Billings,MT';

  if( geocoder ) {
    geocoder.geocode({ 'address': location }, function (results, status) {
      if( status == google.maps.GeocoderStatus.OK ) {
        return results[0];
      }
    });
  }
  callback();
}

就像我提到的那样,我所得到的只是'未定义'。如果我将'console.log(results [0])'放在getLocationData()返回上方,则返回的对象是正确的。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:11)

您的问题是,您没有将回调连接到退货。由于geocode()函数本身已经异步,return在那里没有任何影响。相反,您必须将您在此处返回的值直接传递给回调函数。像这样:

function getLocationData(position, callback) {
  geocoder = new google.maps.Geocoder();
  var location = 'Billings,MT';

  if( geocoder ) {
    geocoder.geocode({ 'address': location }, function (results, status) {
      if( status == google.maps.GeocoderStatus.OK ) {
        callback(results[0]);
      }
    });
  }
}