从javascript函数返回google api地址值

时间:2015-01-10 10:10:33

标签: javascript jquery google-maps google-maps-api-3 google-api

  • 我正在尝试从google maps api获取地址并在函数中返回此地址。我需要更改以使这些地址显示出来吗?

$(document).ready(function() {
  var lat = 17.4807865;
  var lng = 78.4921649;
  var returnAddress = getAddressFromlatlng(function(backaddr,lat,lng){
     alert(" Inside : "+backaddr)
  });
  alert(returnAddress+" returned address ")
});
function getAddressFromlatlng(callback,lat,lng){
  alert(lat+" : "+lng)
  var geocoder = new google.maps.Geocoder();
  var latlng = new google.maps.LatLng(lat,lng);
  geocoder.geocode({'latLng': latlng}, function(results, status){   
    alert(results[0].formatted_address)
    callback(results[0].formatted_address);
  });
}

2 个答案:

答案 0 :(得分:1)

这是不可能的,因为函数在值存在之前返回。

geocode调用是异步的,因此您必须异步处理结果。您已经在回调函数中成功显示了值,这是处理结果的方法。

你可以从getAddressFromlatlng函数返回一个承诺,但这并没有真正改变任何东西。这只是将回调函数包装在一个对象中,这样你就可以对调用的结果进行异步处理。

答案 1 :(得分:1)

您应该从回调结果中获取地址。一旦解析了坐标,就调用一个继续处理返回值的函数,因为只有这样才能得到返回值。如果您通过数组,则使用数组索引并在获得所需数据后更新地址字段。或单独处理它们。通过数组制作请求谷歌的每个项目。一旦响应从谷歌回来,移动到阵列中的下一个项目。如果您可以保存索引,以便在响应到达时知道它,那么就可以等待多个请求。

var currentIndex = null;
function notifyAddressResolved (address) {
    yourArray[currentIndex].address = address;
    resolveNextAddress();
}
function getAddressFromlatlng(callback, lat, lng){
    var geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(lat, lng);  
    geocoder.geocode({'latLng': latlng}, function (results, status) {           
        callback(results[0].formatted_address);
    });
}
function resolveNextAddress () {
    if (currentIndex == null) {
        currentIndex = 0;
    } else {
        currentIndex++;
    }
    getAddressFromlatlng(notifyAddressResolved, yourArray[currentIndex].lat, yourArray[currentIndex].lng);
}