【问题标题】:Javascript skipping lines when trying to geocode location尝试对位置进行地理编码时 Javascript 跳过行
【发布时间】:2013-07-22 07:35:57
【问题描述】:

我正在尝试使用此函数将传递给它的字符串地理编码为谷歌地图结果。

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;
     }

问题是,当我尝试使用 chrome 的调试器对其进行调试并在 ceocoder.geocode 语句内外插入断点时,我可以清楚地看到程序执行到第三行,但它跳过了内部行并直接返回值(返回一个未定义的值)。其他时候,它会通过其中的 if 语句,但它不会进入 return 语句,尽管我在那里设置了一个断点。

我是否试图以错误的方式做到这一点?我该如何解决这个问题?

【问题讨论】:

  • 提示:将断点放在回调中。提示2:为什么库要回调?
  • 知道了。它终于奏效了。谢谢。

标签: javascript google-maps geocoding


【解决方案1】:

我在 StackOverflow 上找到了一些可能的答案,它们可能会有所帮助:

Aleem Saadullah 在 SO 上发布:

终于明白了。这是一个愚蠢的错误。在链接 jQuery 之前,我已经链接了我的 Javascript 文件。代码现在可以正常工作了。

Mikko Ohtamaa answered on SO:

严格来说,您使用的任何自定义 CGI 都不符合 JavaScript 语法。

我的建议是您将自定义动态处理变成 JavaScript cmets,使其不影响正常的 JavaScript 解析。这比编写自定义 JavaScript 容易得多 解析器来满足您的自定义语法。

例如

// %import and other custom commands here

最好的办法是不要把任何非 JavaScript 放到 JS 文件。如果您需要导入等,还有更多 为他们提供通用的 JavaScript 解决方案。

http://browserify.org/

http://requirejs.org/

编辑 2:

Engineer's answer on SO找到答案:

geocoder.geocode异步工作,所以你需要等到它 响应将从谷歌的服务器传递,然后才使用 回复数据。把你的循环放在回调里面:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多