2013-07-04 70 views
4

我正在學習通過研究google的基本示例來創建谷歌地圖。Google Map API V3 - ReferenceError:google沒有定義

我基本上覆制並在head標籤粘貼腳本和Firebug控制檯返回以下錯誤:

ReferenceError: google is not defined 

我的頭部裝有谷歌地圖腳本一起以下幾個腳本。不知道爲什麼它會拋出錯誤。

<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 

    <!-- nmr is used to write my own scripts --> 
    <script>var nmr = jQuery.noConflict();</script> 

    <!-- Google Map scripts --> 
    <script> 
     function initialize() { 
      var mapOptions = { 
       zoom: 13, 
       center: new google.maps.LatLng(-34.397, 150.644), 
       mapTypeId: google.maps.MapTypeId.ROADMAP 
      }; 

      var map = new google.maps.Map(document.getElementById('map-canvas'), 
      mapOptions); 
     }; 

     function loadScript() { 
      var script = document.createElement("script"); 
      script.type = "text/javascript"; 
      script.src = "https://maps.googleapis.com/maps/api/js?key=AIzaSyB7CgOuhFLDkh2VAGW1S2Y" + "sensor=false" + "callback=initialize"; 
      document.body.appendChild(script); 
     } 

     window.onload = loadScript; 

    </script> 

我也試過初始化函數之前添加這一點,但沒有奏效。

<script> var google = jQuery.noConflict(); </script> 

任何人都可以幫忙嗎?謝謝!

+0

嘿你找出問題了,我有同樣的問題 – Lion789

回答

2

你的來源是錯的,我也建議specifing要加載的準確版本:

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?v=3&sensor=false"></script> 
+0

對不起,7月4日晚回來。那麼,我確實指定了版本以及使用http或https,所有URL都返回了地圖api scipts,但我的控制檯仍然拋出引用錯誤:google未定義。 – user1824996

0

讓我們看看這是怎麼回事代碼。

1)讓我們忽略ajax.googleapis.com,因爲無論如何都不會在發佈的代碼中使用它。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 

2)谷歌的對象,即拋出errror,是由谷歌地圖定義3 API本身,無關與jQuery,併爲此事API V3不使用任何jQuery的,所以下面這一行需要刪除,因爲它與我們面前的問題無關。

<script> var google = jQuery.noConflict(); </script> 

3)現在,這是從JavaScript調用時,瀏覽器訪問該頁面的第一件事是

window.onload = loadScript; 

4)那麼,是什麼上述行實際上意味着什麼呢?在所有外部文件已經被加載後,包括圖像,樣式,腳本和其他依賴資源,並且在DOM已經被加載並呈現並準備好執行之後很久,windows.onload就會啓動延遲。

這裏是我們遇到問題的地方。該windows.onload調用loadScript功能,追加

script.src = "https://maps.googleapis.com/maps/api/js?key=AIzaSyB7CgOuhFLDkh2VAGW1S2Y" + "sensor=false" + "callback=initialize"; 

(順便說一下後您的查詢字符串丟失了所有的「&符號」中的查詢變量之間 .... /JS? v = 3 &鍵= XYZ &傳感器=假&回調=初始化< ---格式這就是正確

5)期待已久的谷歌API。不。它只會追加API的加載器,儘管url本身包含單詞api。打開並查看上面的文件,您將看到一個document.write和一個API的各個部分塊,根據您調用加載程序的查詢字符串參數進行有條件加載。

6)那是什麼意思?您正在調用初始化函數,認爲您獲得的是Google API,但您所獲得的只是包含API的Google API加載器,而該API又包含Google對象的定義。因此,在Maps API已連接之前觸發了回調,因此在initialize()回調函數被觸發時,google未定義。

解決方案

看看這裏doktormolle解決方案,它採用加載初始函數以不同的方式 - >http://jsfiddle.net/doktormolle/7cu2F/

和這裏實際上增加了一個解決方案的谷歌地圖裝載機權你的頁面,繞過中間人 - >http://jsfiddle.net/doktormolle/zJ5em/

相關問題