谷歌地理编码,异步Javascript,无法正常工作

时间:2014-08-06 17:58:06

标签: javascript asynchronous geocoding google-geocoder

我有一个函数,在外部.js文件中,该文件应该接收地址字符串然后返回纬度和经度。它什么都不返回。有人可以帮忙吗?

我也想问;在javascript中,当你从另一个函数中调用异步函数时;一旦外部函数终止,异步函数会终止吗?

这是代码,任何人都可以解释为什么这不返回任何东西?感谢。

function FindLatLong(address)
{
        var geocoder = new google.maps.Geocoder();

        geocoder.geocode({ 'address': address }, function (results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                var lat = results[0].geometry.location.lat();
                var lng = results[0].geometry.location.lng();
                return { Status: "OK", Latitude: lat, Longitude: lng };
            }
        });
}

(我当然包括google maps js lib)

我基本上没有从地理编码器得到一个好的结果;如果我不把它放在FindLatLong函数中,相同的代码工作,而只是将它嵌入到我调用FindLatLong的地方,即上面的代码放入FindLatLong函数时不起作用,但如果我将它用作调用javascript的一部分,则有效码。函数确实被调用,Geocoder()确实被调用,但是没有返回'OK'结果,实际上没有重新生成结果,甚至没有来自谷歌的错误。

地址字符串是“伦敦,英国”

1 个答案:

答案 0 :(得分:2)

该方法是异步的,因此请使用回调!

function FindLatLong(address, callback)
{
    var geocoder = new google.maps.Geocoder();

    geocoder.geocode({ 'address': address }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var lat = results[0].geometry.location.lat();
            var lng = results[0].geometry.location.lng();
            callback({ Status: "OK", Latitude: lat, Longitude: lng });
        }
    });
}

并调用函数:

FindLatLong(address, function(data) {
    console.log(data);
});