0

私は都市の場所(学校、レストラン、地下鉄などの興味のあるポイント...)に関連する情報を持つGoogleマップを表示するプロジェクトを持っています しかし、私はまずAPIを使用してください。"Uncaught ReferenceError:google is defined"を解決するにはどうすればよいですか? (Google MAPS API)

シンプルなマーカーを表示するのが難しかったですが、確かにChromeコンソールには「Uncaught ReferenceError:Googleは定義されていません。」と表示され、マーカーは表示されません。私はフォーラムのどこでも検索しましたが、何も私を助けませんでした。

私はあなたに私の小さなHTMLコードを提供します。

<!DOCTYPE html> 
<html> 
<head> 
</head> 
<body> 
<p> TEST MAP </p> 
<div id="map" style="height: 500px; width:900px;"></div> 



<script type="text/javascript" src="test.js"></script> 

<script async defer src="http://maps.googleapis.com/maps/api/js?key=MY_KEY&callback=initMap"></script> 

<!-- Si le script n'est pas lu par le navigateur --> 
<noscript> 
    <p>Attention : </p> 
    <p>Afin de pouvoir utiliser Google Maps, JavaScript doit être activé.</p> 
    <p>Or, il semble que JavaScript est désactivé ou qu'il ne soit pas supporté par votre navigateur.</p> 
    <p>Pour afficher Google Maps, activez JavaScript en modifiant les options de votre navigateur, puis essayez à nouveau.</p> 
</noscript> 

</body> 
</html> 

その後、これは私のJavascriptコードです:

var maCarte; 

    function initMap() { 
     var optionsCarte = { 
     center: {lat: 43.4810896, lng: -1.540436}, 
     zoom: 16 
     } 
     maCarte = new google.maps.Map(document.getElementById("map"),optionsCarte); 
    } 

    // Création d'un marqueur sur la carte : Ne fonctionne pas 
    var optionsMarqueur = { 
         position: {lat: 43.4810896, lng: -1.540436}, 
         map: maCarte 
        }; 

    var marqueur = new google.maps.Marker(optionsMarqueur); 
+2

スクリプトのインクルードをgoogleスクリプトの後ろに移動します。 – Archer

答えて

2

グーグルマップはasynchronouslyにロードされている - あなたが直接スクリプトタグを含める場合でも。したがって、initMapに指定されているコールバックの内部まで、google.mapsクラス(google.maps.Markerなど)を使用しないでください。

test.jsを変更すると、initMapコールバック内にマーカーが作成されます。

maCarteも使用していましたが、まだundefinedでした。だから、あなたはそれを作成した後にのみマップ(maCarte)にあなたのマーカーを追加する必要があります。

var maCarte; 
    var marqueur 

function initMap() { 

    var optionsCarte = { 
     center: {lat: 43.4810896, lng: -1.540436}, 
     zoom: 16 
    } 

    maCarte = new google.maps.Map(document.getElementById("map"),optionsCarte); 

    // Création d'un marqueur sur la carte : Ne fonctionne pas 
    var optionsMarqueur = { 
     position: {lat: 43.4810896, lng: -1.540436}, 
     map: maCarte 
    }; 

    marqueur = new google.maps.Marker(optionsMarqueur); 
} 

をあなたはtest.jsが含まれている場合はGoogleがスクリプトタグをマップする前または後に続いて、それは問題ではありません。

+1

ありがとう、できます ! 私はこの日を過ごす:/ 私はGoogle Mapsのプロになる前に行くには長い道のりがあると信じています^^ –

0

あなたは、あなたのテスト・コードをロードする前にgoogleapisロードする必要があります。

編集:これもヘッドに移動できますか?

<script defer src="http://maps.googleapis.com/maps/api/js?key=MY_KEY&callback=initMap"></script> 
<script defer type="text/javascript" src="test.js"></script> 

非同期と遅延は、2つの異なることを行います。同じスクリプトタグに入れないでください。

asyncは、HTML解析中にファイルをダウンロードし、ダウンロードが完了したらHTMLパーサを実行して実行します。

遅延は、HTML解析中にファイルをダウンロードし、パーサーが完了した後にのみ実行します。

+0

あなたの素早い応答ありがとう:) 私はあなたが言ったことを試みたが動作しません –

+0

test.jsスクリプトにdeferを追加し、googleapisスクリプトからasyncを削除しましたか?同じスクリプトタグで非同期と遅延を行う必要はありませんが、別のことを行います。 – Tipster74743

+0

"initMap()"は関数ではなく、空白のページがあります –

1

あなたはASYNを使用し、属性延期:

  • 非同期:非同期スクリプトを読み込む

  • 延期:最後に

が、あなたのtest.jsが負荷とexecでexcuteをsynchrnous:Googleマップの前にsdk Googleは定義されていません

http://www.w3schools.com/tags/att_script_async.asp

http://www.w3schools.com/tags/att_script_defer.asp

+0

あなたのクイックレスポンスに感謝します:) 私がよく理解すれば、2番目のスクリプトの後に最初のスクリプトを移動するだけです。 しかし、動作しません。コンソールに同じメッセージが表示され、マーカーが表示されません。 –

+0

スクリプトタグに非同期と遅延を追加した後に移動します。 –

+0

このようにしますか?

0

だから私は、順序を変更し、2番目のスクリプトで「非同期延期」を置く必要がありますか?このように:

<script async defer src="http://maps.googleapis.com/maps/api/js?key=MY_KEY&callback=initMap"></script> 
<script async defer type="text/javascript" src="test.js"></script> 

それは何も変わりません

+0

私の答えを見てください。コメント欄にはいくつかの点がありませんでした。 1)Google Mapsは非同期で読み込まれます(スクリプトタグを 'async'と' defer'なしで直接インクルードしていても)。そして、2)maCarteをあなたのマーカーとして使用していました。まだ未定義です。 – Adam

関連する問題