【问题标题】:Errors attempting to use Google maps directions in Magento (Uncaught ReferenceError: google is not defined)尝试在 Magento 中使用 Google 地图方向的错误(未捕获的 ReferenceError:未定义 google)
【发布时间】:2013-03-08 20:22:24
【问题描述】:

我创建了一个路线模板文件,专门用于使用 Google 路线。我的脚本在 Magento 之外工作。不幸的是,当我将脚本移动到 page/directions.phtml 控制台时,控制台返回以下错误:

“未捕获的引用错误:未定义 google”

当我尝试点击触发 calcRoute() 函数的测试时,我收到以下错误:

"Uncaught TypeError: Cannot call method 'route' of undefined"

我认为这些错误与 Google Maps API 调用有关,但是图形地图在页面上显示和运行正常。这些错误具体与调用 google.maps.DirectionsService() 以在下面显示的 javascript 的第 2 行定义方向服务以及在最后调用方向服务。路由有关。两者都与方向有关。

为什么会显示地图,但是当脚本在我的 html 测试中运行时,方向会抛出错误?我很困惑。

Javascript

  var directionDisplay;
  var directionsService = new google.maps.DirectionsService();
  var map;

  function directionsMap() {
    directionsDisplay = new google.maps.DirectionsRenderer();
    var chicago = new google.maps.LatLng(38.77627, -95.910965);
    var mapOptions = {
      zoom:4,
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      center: chicago
    }
    map = new google.maps.Map(document.getElementById('map-directions'), mapOptions);
    directionsDisplay.setMap(map);

    //Place Markers
    var baldwinsvilleMarker = new google.maps.Marker({
        position: new google.maps.LatLng(00.00000, 00.00000),
        map: map,
        title:"store location 1"
    });
    var sacramentoMarker = new google.maps.Marker({
        position: new google.maps.LatLng(00.00000, 00.00000),
        map: map,
        title:"store location 2"
    });
    var stLouisMarker = new google.maps.Marker({
        position: new google.maps.LatLng(000.00000, -000.00000),
        map: map,
        title:"store location 3"
    });
    var catersvilleMarker = new google.maps.Marker({
        position: new google.maps.LatLng(00.000000, -84.000000),
        map: map,
        title:"store location 4"
    });

    directionsDisplay.setMap(map);
    directionsDisplay.setPanel(document.getElementById("get-directions"));

  }

  function calcRoute() {
    console.log("calcRoute ran")
    var start = document.getElementById('start').value;
    var end = document.getElementById('end').value;
    console.log(start + ' ' + end)
    var request = {
        origin:start,
        destination:end,
        travelMode: google.maps.DirectionsTravelMode.DRIVING
    };
    directionsService.route(request, function(response, status) {
      if (status == google.maps.DirectionsStatus.OK) {
        directionsDisplay.setDirections(response);
      }
    });
  }

HTML

           #I am including this line in the document head
           <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
           <style onload="directionsMap()">
            #map-directions{width: 65%; height: 300px; float: left; border:5px solid #EEEEEE;}
            #get-directions{width: 65%; float: left;}
            .map-sidebar{width: 32%; height: 300px; float: right;}
            </style>

            <div id="map-directions"></div>
            <div class="map-sidebar">
                <h2>Get Directions</h2>

                <input type="text" id="start" value="chicago, il"/>
                <b>End: </b>
                <select id="end" onchange="calcRoute();">

                  <option value="value 1">
                      store location 1
                  </option>

                  <option value="value 2">
                      store location 2
                  </option>

                  <option value="value 3">
                      store location 3
                  </option>

                  <option value="value 4">
                      store location 4
                  </option>

                </select>
                <button onclick="calcRoute();"> test</button>


            </div>
            <div id="get-directions"></div>

【问题讨论】:

  • 你是在调用你在google api之前发布的javascript吗?我无法从你的代码中看到你在哪里调用它。
  • 这是问题所在,请参阅我选择的答案下的 cmets。感谢您的帮助!

标签: javascript jquery google-maps magento google-maps-api-3


【解决方案1】:

您应该按照以下步骤逐步调用:

  1. 先调用google map api

  2. 然后调用自己的JS

  3. body onload=directionsMap() 中触发directionsMap(),而不是style onload。

我认为您的主要问题是,您在 google 完成加载之前调用了 directionsMap() 函数。

所以我认为在 jQuery 加载事件中调用 directionsMap() 是更好的选择,例如:

$(function() {
   directionsMap()
});

【讨论】:

  • 抱歉,我在排除故障时使用了它。它在我的身体标签上。你的建议正是我正在做的。如果我交换第一步和第二步,您列出的地图根本不会加载。地图正在加载的事实让我相信它正在被调用。
  • 你是对的!!!我放了一些断点来专门测试这个。它必须部分加载,因此为什么要显示地图,但有关订单的某些东西却把它弄乱了。我通过将我的 JS 移动到文档中来测试这个理论(只是为了保证它是在调用之后)。在纸面上看起来加载顺序是正确的,实际上并非如此。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2017-03-10
  • 2012-09-12
  • 1970-01-01
  • 2020-10-04
  • 2015-12-18
  • 2019-03-31
  • 1970-01-01
  • 2019-03-22
相关资源
最近更新 更多