Jquery 理解Javascript中的地理编码

Jquery 理解Javascript中的地理编码,jquery,geocoding,Jquery,Geocoding,好的,我在jQuery应用程序中设置了谷歌地图。(V3)。我可以整天给地图编地理代码 所以,我想我应该聪明一点,把实际的地理编码函数移到一个函数中 以下是我正在使用的函数: function geocode(address) { var self = this; geocoder.geocode( { 'address': address }, function(results, status) { console.log(status);

好的,我在jQuery应用程序中设置了谷歌地图。(V3)。我可以整天给地图编地理代码

所以,我想我应该聪明一点,把实际的地理编码函数移到一个函数中

以下是我正在使用的函数:

function geocode(address) { var self = this; geocoder.geocode( { 'address': address }, function(results, status) { console.log(status); if (status == google.maps.GeocoderStatus.OK) { return results[0].geometry.location; } else { return null; } }); return "WTF?"; } 功能地理编码(地址){ var self=这个; geocoder.geocode({'address':address},函数(结果,状态){ 控制台日志(状态); if(status==google.maps.GeocoderStatus.OK){ 返回结果[0]。geometry.location; }else{return null;} }); 返回“WTF?”; } “WTF”是一个你马上就会看到的笑话

现在,在我的代码后面,我尝试调用如下函数:

var start_latlng; start_latlng = geocode(start_address); console.log(start_latlng); geocode(start_address, function(data) { start_latlng = data; console.log(start_latlng); }); var启动时间; start\u latlng=地理编码(start\u地址); 控制台日志(启动/锁定); 我在控制台中得到的是:

WTF? OK 世界跆拳道联盟? 好啊 请注意,“WTF”在“OK”之前,即使我在函数中打印了“OK”。(控制台日志(状态))

我的猜测是因为地理编码需要一点时间来返回,并且函数在返回第一个地理编码值之前会继续运行

有没有人对如何改进这一点有任何建议,以使我的“启动”包含预期值

谢谢你的指点

*编辑**

这就是我最后要做的

我这样调用函数:

var start_latlng; start_latlng = geocode(start_address); console.log(start_latlng); geocode(start_address, function(data) { start_latlng = data; console.log(start_latlng); }); 地理编码(起始地址、功能(数据){ 启动时间=数据; 控制台日志(启动/锁定); }); 这是一个新的函数(还没有完成,但你已经有了想法)

函数地理代码(地址、回调){ geocoder.geocode({'address':address},函数(结果,状态){ if(status==google.maps.GeocoderStatus.OK){ 回调(结果[0].geometry.location); } 否则{ 回调(“错误”); } }); } 工作起来很有魅力。:-)


谢谢你的提示并帮助我更好地思考。

地理编码器似乎是异步工作的,所以结果并不令人惊讶。我的意思是,执行流经过geocoder调用点,因此函数返回,随后geocoder返回其结果-这就是为什么您按该顺序获得输出。

geocode()期望的是回调函数作为其参数。这意味着它的调用结果将在函数准备就绪时异步传递给您指定的函数,而不是作为
返回值

function geocode(address) {
    geocoder.geocode( { 'address': address }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            /* do whatever you need to do with the results here */
        }
        else {
            /* handle the error */
        }
    });
}