2016-11-14 29 views
-1

我正在使用Google Maps/Places API的网站上工作。我已验证我的API密钥工作正常,所以这不是问题。我甚至无法让地图显示 - 这是我的问题。
我已经完全复制了该示例,但它仍然无法正常工作。
Here's my code在一个要点,因为它是一些文件。它应该是可运行的,这就是所有的内容。Google Map JS Not Showing(试过其他答案)

我到目前为止已经试过
- 把所有的文件准备就绪功能(jQuery的)。
- 将它从getCurrentPosition函数中取出,这样它就出现在main.js文件中。
- 在HTML文件中移动脚本链接的位置,在任何位置都不会改变。
- 如果我console.log()lat和long变量,他们打印我的位置。但是,当我将它们键入到Chrome开发工具控制台时,它们是“未定义的”。但是,我的“地图”变量将地图div打印到控制台。
- 使用静态坐标,而不是从导航器HTML5元素收集的坐标。
- 设置地图div的像素,百分比和vh/vw的高度和宽度。它采取了屏幕 - 我知道,因为我给它一个背景颜色显示。
- 添加参数到我的API负载结束:&callback=initialize&libraries=places

这是我第一次使用地图,所以我完全迷失在这里。我跟着Google's example去发球,但什么都没有。

WebStorm强调了所有的google.maps.x类,并声称它们是“未解决的变量或类型”。这可能是我的问题,但我不知道是什么原因或如何修复它。并且要清楚,我已经浏览了每一篇关于Stack Overflow的文章,但都没有找到解决方案。

UPDATE:
- 我只是试图复制并从谷歌粘贴this example正是显示为(我的API密钥,当然)它,它仍然没有奏效。我把它放在HTML中的脚本标签中。它的唯一工作方式是删除initMap()函数 - 不是它的内容,只是将它声明为一个函数。那么为什么这里的表演很怪异呢?它正在处理函数内部的所有内容(在HTML中的脚本标记中),就好像它全部未定义一样,仅仅因为它位于函数中......在最高范围级别。

+0

'initialize'不是全局可访问的。把它从'getCurrentPosition'回调中移出 – Lucius

+0

这是我尝试过的事情列表中的第二个。我也试着把所有东西都拿出来,只是为它设置静态坐标,没有改变。 – Mazzone

回答

2

您正试图在Google Maps SDK加载之前运行main.js。移动它上面main.js' in index.html`:

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=MY_KEY&libraries=places"></script> 
    <script src="js/plugins.js"></script> 
    <script src="js/main.js"></script> 

然后,取出initialize功能:

if ("geolocation" in navigator) { 
console.log("Geolocation is enabled."); 
navigator.geolocation.getCurrentPosition(function (position) { 
    var lat = position.coords.latitude; 
    var long = position.coords.longitude; 
    var map; 
    var service; 
    var infoWindow; 

    console.log("lat: " + lat); 

    //Initialize Google Map. Starts at user's location. 

     var userLocation = new google.maps.LatLng(lat, long); 

     map = new google.maps.Map(document.getElementById('map'), { 
      center: userLocation, 
      zoom: 15 
     }); 

     var request = { 
      location: userLocation, 
      radius: '500', 
      types: ['store'] 
     }; 

     service = new google.maps.places.PlaceService(map); 
     service.nearbySearch(request, callback); 


    //Callback function for nearbySearch 
    function callback(results, status) { 
     if (status == google.maps.places.PlacesServiceStatus.OK) { 
      for (var i = 0; i < results.length; i++) { 
       var place = results[i]; 
       createMarker(results[i]); 
      } 
     } 
    } 
}); 
} else { 
console.log("Geolocation is disabled."); 
//Inform user why we use location 
//Allow user to enter location manually 
} 

这对我的作品。

+0

谢谢,这也适用于我。为什么Google会显示初始化函数? – Mazzone

+1

Google示例只有一个函数,只有在SDK加载后才会从回调中触发。 – sideroxylon