0

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

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 语句,尽管我在那里设置了一个断点。

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

4

1 回答 1

0

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

Aleem Saadullah在 SO 上发布:

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

Mikko Ohtamaa 在 SO 上回答

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

我的建议是你把你自定义的动态处理变成 JavaScript 注释,这样就不会影响正常的 JavaScript 解析。这比编写自定义 JavaScript 解析器来满足您的自定义语法要容易得多。

例如

// %import and other custom commands here

最好的方法是您根本不会将任何非 JavaScript 放入 JS 文件。如果您需要导入等,可以使用一些更通用的 JavaScript 解决方案。

http://browserify.org/

http://requirejs.org/

编辑2:

找到了工程师对 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
于 2015-10-06T18:43:18.100 回答