Javascript 为什么这个代码会抛出';谷歌未定义';错误和';TypeError:无法读取属性';PlacesService';在初始化时未定义的';-错误?

Javascript 为什么这个代码会抛出';谷歌未定义';错误和';TypeError:无法读取属性';PlacesService';在初始化时未定义的';-错误?,javascript,html,google-maps,google-api,Javascript,Html,Google Maps,Google Api,我正在尝试一个谷歌地图api,带有显示附近餐馆/咖啡馆的标记。 我不断发现以下两个错误: 未捕获引用错误:索引中未定义google。html:47 未捕获(承诺中)类型错误:无法在js处读取初始化时未定义(index.html:26)的属性“PlacesService”?key=[API key]&callback=initialize&libraries=&v=weekly:142在js处?key=[API key]&callback=initialize&v=weekly:142 为什么

我正在尝试一个谷歌地图api,带有显示附近餐馆/咖啡馆的标记。 我不断发现以下两个错误:

  • 未捕获引用错误:索引中未定义google。html:47

  • 未捕获(承诺中)类型错误:无法在js处读取初始化时未定义(index.html:26)的属性“PlacesService”?key=[API key]&callback=initialize&libraries=&v=weekly:142在js处?key=[API key]&callback=initialize&v=weekly:142

  • 为什么我会出现这个错误,我如何才能使它工作

    html,body,#map{
    身高:100%;
    保证金:0;
    填充:0;
    }
    
    餐厅
    函数初始化(){
    var center=new google.maps.LatLng(53.349804,-6.260310);
    map=new google.maps.map(document.getElementById('map'){
    中心:中心,,
    缩放:12,
    });
    var请求={
    地点:中环,
    半径:8047,
    类型:[“咖啡馆”]
    };
    var service=newgoogle.maps.places.PlacesService(地图);
    服务.nearbySearch(请求、回调);
    }
    函数回调(结果、状态){
    if(status==google.maps.places.PlaceServiceStatus.OK){
    对于(var i=0;i
    发生的情况是,内联脚本在解析时立即启动。此时,您需要的“地图”脚本尚未加载。事实上,它只会在解析完页面的其余部分后加载


    要解决此问题,请将内联代码转换为
    .js
    文件,并像加载地图文件一样加载到
    script
    标记中,该标记带有指向文件的
    src
    defer
    属性。确保在尝试引用时尚未加载的脚本文件中定义了对地图文件的请求后,才出现此脚本标记。请从代码段中删除API密钥。您不应公开披露您提供的错误stacktrace中需要删除的API密钥,或者从
    maps.googleapis.com/maps
    脚本标记中删除async和defer属性,或者按照Aditya在其回答中的解释进行操作。添加到@Teemu提供的解释中。通过从脚本标记中删除
    async
    defer
    属性,可以指示浏览器停止正在执行的所有操作,直到它获取文件并对其进行解析。这也会阻止HTML呈现。在大多数情况下,这是非常不可取的。如果删除了这些属性,请确保将脚本标记移到body标记的底部,以免阻止HTML的呈现。这样做的缺点是,从“地图”获取文件的请求只有在HTML被解析后才会发生。谢谢你,Aditya,它解决了google错误,现在我只有“PlacesService”错误。你不是在向库请求位置。在脚本中,src将
    &libraries=
    更改为
    &libraries=places
    。这将确保库包含在您收到的文件中。。。这就是为什么Google提供了
    callback
    参数,以便您可以在加载API后调用任何函数。@Adiyta,即使添加了&libraries,它也不起作用=places@Johnroiste您的代码中有一些拼写错误,如果您修复了这些错误,应该可以