2013-07-22 39 views
0

我试图使用此函数对传递给它的字符串进行地理编码,转换为Google地图的结果。尝试使用地理编码位置时,Javascript跳过了行

function codeAddress(address) { 
     var firstResult; 
     geocoder.geocode({ 'address': address}, function(results, status) { 
     if(status == google.maps.GeocoderStatus.OK) { 
      firstResult = results[0]; 
      } else { 
      firstResult = "failed"; 
     } 
     }); 
     return firstResult; 
    } 

的问题是,当我尝试使用由铬调试调试和外插断点和ceocoder.geocode语句中,我可以清楚地看到程序执行走在第三行,但它跳过内部线并直接返回返回值(返回一个未定义的值)。有些时候,它经历了if语句,但它并没有进入return语句,尽管我在那里设置了一个断点。

我想以错误的方式做到这一点?我怎样才能解决这个问题?

+0

提示:地方断点_inside_回调。提示2:图书馆为什么要回拨? –

+0

明白了。它终于奏效了。谢谢。 – user2565010

回答

0

我发现在计算器上的一些可能的答案,他们可能会有所帮助:

Aleem Saadullah上SO贴:

终于想通了。这是一个愚蠢的错误。我在链接jQuery之前链接了我的Javascript文件。代码现在工作正常。

Mikko Ohtamaa answered on SO

要严格,你正在使用的任何自定义CGI不符合 JavaScript语法。

我建议您将您的自定义动态处理转换为 JavaScript注释,以免它影响正常的JavaScript解析 。这比编写自定义JavaScript解析器来迎合您的自定义语法要容易得多。

E.g.

// %import and other custom commands here 

最好的办法是,你不会把任何非JavaScript在所有JS 文件。如果您需要导入,并且还有其他更多 通用JavaScript解决方案。

http://browserify.org/

http://requirejs.org/

编辑2:

找到答案上Engineer's answer on SO

geocoder.geocode工作异步,所以你需要等到它的 响应才会从google的服务器上传递出来,然后才用 响应数据。把你的循环回调的内部:

geocoder.geocode({ 'address': zip }, function(results, status) { // status is empty 
    if (status == google.maps.GeocoderStatus.OK) { 
    var userLat = results[0].geometry.location.lat(); 
    var userLng = results[0].geometry.location.lng(); 
    userLatLng = results[0].geometry.location; 
    for (var i = data.length-1; i--;) { 
     //loop body 
    } 
}});//end geocode 
相关问题