Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript";初始化";未定义,但函数存在_Javascript_Google Maps Api 3 - Fatal编程技术网

Javascript";初始化";未定义,但函数存在

Javascript";初始化";未定义,但函数存在,javascript,google-maps-api-3,Javascript,Google Maps Api 3,我正在尝试加载带有多个标记的谷歌地图。此代码在onload中调用: <body onload="initialize()"> 有什么想法吗?谢谢尝试将此添加到您的代码中: document.getElementsByTagName('body')[0].onload = initialize; 它可能超出范围。可能的问题是: 您有一个脚本错误,该错误会停止对脚本的解析,因此错误后的所有内容都是未定义的。检查错误控制台中的脚本分析错误,并修复所有发现的错误。除非您使用某种模

我正在尝试加载带有多个标记的谷歌地图。此代码在onload中调用:

    <body onload="initialize()">

有什么想法吗?谢谢

尝试将此添加到您的代码中:

document.getElementsByTagName('body')[0].onload = initialize;
它可能超出范围。

可能的问题是:

  • 您有一个脚本错误,该错误会停止对脚本的解析,因此错误后的所有内容都是未定义的。检查错误控制台中的脚本分析错误,并修复所有发现的错误。除非您使用某种模板引擎来替换这些,否则这样的代码不是合法的javascript:
    var cities={{cities}

  • 函数
    initialize()
    未在全局作用域中定义(必须是全局作用域,才能从onload属性进行初始化)。如果是这种情况,那么您需要将其以不同方式分配给onload,以便可以使用不在全局范围内的函数,或者将其移动到全局范围内


  • 仅供参考,由于您似乎已经在使用jQuery,您可以使用jQuery中的内置功能,而不是等待onload:

    $(document).ready(initialize);
    
    虽然这只会在问题在上面2时解决问题(并且您将这行代码放在与
    initialize
    函数相同的范围内),但如果问题在上面1时则不会



    另外,如果您共享一个正在运行的页面链接,我们可能会在几分钟内解决这个问题,而不仅仅是猜测。

    不确定它为什么不调用您的函数,但是,我通常使用以下方法调用初始化方法

    <html>
    <head>
    ...
    </head>
    <body>
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
    <script>
      function initialise(){
         ...
      }
      google.maps.event.addDomListener(window, 'load', initialise); 
    </script>
    ...
    
    
    ...
    函数初始化(){
    ...
    }
    google.maps.event.AddDomainListener(窗口“加载”,初始化);
    ...
    
    @user3058197:您的代码中存在大量打字错误和误解

    请查看以下内容

    Line 14: var contentString --- Missing semicolon.
    Line 31: size: , --- Extra comma at the last line.
    Line 36: var markers  --- Missing semicolon.
    Line 44: Dont pass null values better use the following
    
    var latLng = new google.maps.LatLng("41.862338", "-87.615855");
    //check if address in the US (The below is better than your previous code) 
    $.ajax({
    url: 'https://maps.googleapis.com/maps/api/geocode/json?latlng='+ latLng
    +'&sensor=false'});
    Line 57: var mapOptions = {,}; --- Extra comma at the end of the json object.
    

    我只是指出了一些事情。请使用调试javascript代码。请检查此Javascript始终在
    内,是在
    之前(在
    内)还是在
    之后?当我在控制台中粘贴脚本时,它有语法错误。如果脚本有语法错误,则函数基本上没有定义,因为代码从未运行过。哦,我猜你在使用服务器端模板引擎-为了这个问题,你最好用实际值替换变量。所有的var identifier={{identifier}东西都没有意义。我正在使用的{{}东西是jinja模板。代码在body后面。我应该把它放在前面吗?我正在编辑上面的代码以删除模板。@user3058197您还留下了一些{{},因此仍然存在语法错误。可以帮助您查看语法错误(请确保勾选底部选项部分中的所有内容,否则您将得到与此目的无关的错误)。感谢您的回复——您能告诉我将其放置在何处吗?@user3058197它不应该与何处有关,因为
    initialize
    函数定义将被提升。为了可读性和清晰性,我想在代码的底部说。有没有理由不使用
    document.body
    而不是long方法?甚至是
    window.onload
    (或者
    window.addEventListener('load',initialize,false);
    获取最佳实践)?@PhistucK通常,
    document.body
    非常好,实际上速度更快,但是如果在框架集文档上使用,它将返回一个
    frameset
    元素,所以它不是100%等同于body
    onload
    。使用
    window.onload
    也是不等效的,旧版IE不支持
    addEventListener
    ,因此您还需要使用
    attachEvent
    。就这个问题而言,我认为window.onload是完全等效的。显然,我指的是整个addEventListener/attachEvent猜字谜。它不会起作用。请检查正在调用的函数的名称(似乎是输入错误。请编辑它或删除此答案)。完全正确,我在侦听器调用中输入了一个输入错误…感谢您指出!已在代码中更正。。。
    <html>
    <head>
    ...
    </head>
    <body>
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
    <script>
      function initialise(){
         ...
      }
      google.maps.event.addDomListener(window, 'load', initialise); 
    </script>
    ...
    
    Line 14: var contentString --- Missing semicolon.
    Line 31: size: , --- Extra comma at the last line.
    Line 36: var markers  --- Missing semicolon.
    Line 44: Dont pass null values better use the following
    
    var latLng = new google.maps.LatLng("41.862338", "-87.615855");
    //check if address in the US (The below is better than your previous code) 
    $.ajax({
    url: 'https://maps.googleapis.com/maps/api/geocode/json?latlng='+ latLng
    +'&sensor=false'});
    Line 57: var mapOptions = {,}; --- Extra comma at the end of the json object.