$(document).ready()中代码的意外行为 - 是否应该按顺序执行?

时间:2013-08-02 22:29:12

标签: jquery google-maps-api-3 geocoding document-ready ready

我一直在使用JavaScript和jQuery一段时间。但我仍然没有完全掌握这一切是如何运作的。如果我的问题多余,难以理解和/或简单愚蠢,我会为此道歉。

我正在使用Google Maps API v3jQuery(没有插件,只是简单的jQuery)一起使用伦敦地图填充div#googleMap。除此之外,我正在尝试编写一个函数来获取给定地址的坐标(Geocoding)。我要对这些坐标做些什么是另一回事。

我的问题在于以下代码:

jQuery(document).ready(function($) {
  mapObject   = initGoogleMaps();
  coordinates = getCoordinates('United Kingdom');

  console.log(coordinates.toString());

  function initGoogleMaps() {
    google.maps.visualRefresh = true;
    map = new google.maps.Map($("#googleMap")[0], {
      center:            new google.maps.LatLng(51.511214, -0.119824),
      zoom:                     10,
      heading:                  0,
      mapTypeId:                google.maps.MapTypeId.ROADMAP,
      disableDefaultUI:         true,
      disableDoubleClickZoom:   true,
      draggable:                false,
      keyboardShortcuts:        false,
      scrollwheel:              false,
      backgroundColor:          'transparent'
    });
    return map;
  }

  function getCoordinates(address) {
    fallback    = 'London, United Kingdom';
    geocoder    = new google.maps.Geocoder();
    address     = typeof(address) == 'string' ? address : fallback;
    coordinates = '';

    geocoder.geocode({ 'address':address },
                     function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        coordinates = results[0].geometry.location;
      } else {
        coordinates = 'Location: "' + address + '" not found.\n' +
                      'Status: ' + status;
      }
    });

    return coordinates;
  }
}); // jQuery(document)

我正在使用Chrome DevTools,更具体地说,是谷歌Chrome内置的Javascript Console

当我刷新页面时,我得到的输出是:

Coordinates: ↩

我想也许Maps API在地理位置编码方面不成功。但...

  1. 这会打印一条消息:Location "London Heathrow" not found.
  2. 我在coordinates之外宣布$.ready()并在控制台中打印完空消息后输入coordinates,按下返回,它给了我:coordinates ▸ M {jb: 55.378051, kb: -3.43597299999999, toString: function, b: function, equals: function…}
  3. 哪个奇怪。在我看来,coordinates标识符已分配一个空字符串('')值。为什么?在我使用getCoordinates()标识符之前,我调用了coordinates函数。

    $(document).ready(function(){...})内的指令是否可能以任何特定顺序执行?或者是因为通过Maps API获取results时的延迟?如何在获取并分配console.log(...)的值后才能获得coordinates指令?

    也许这是我忽视的一些愚蠢的错误。

1 个答案:

答案 0 :(得分:0)

您的coordinates = '';超出了.geocode回调功能的范围。您需要var coordinates = '';代替。