initMap n’est pas une fonction Google Maps Javascript

Je sais que cette question a été posée. Mais je ne peux toujours pas aller au-delà. J’essaie simplement de charger l’API googlemaps dans js fiddle. Je ne peux pas dépasser l’erreur: initMap n’est pas une fonction. Mon jsfiddle ici: jsfiddle

Mon code:

function initMap() { var map = new google.maps.Map(document.getElementById('map'), { center: { lat: 34.397, lng: 150.644 }, scrollwheel: false, zoom: 2 }); 

HTML:

  

Quand j’ai la fonction initmap () {} (entre parenthèses), la carte ne se charge pas et j’obtiens l’erreur. Lorsque supprimer la function initmap{} et juste:

 var map = new google.maps.Map(document.getElementById('map'), { center: { lat: 34.397, lng: 150.644 }, scrollwheel: false, zoom: 2 }); 

La carte se charge, mais j’obtiens toujours l’erreur:

initMap n’est pas une fonction

Cela pourrait avoir quelque chose à voir avec un rappel. Je n’ai pas écrit javascript depuis un moment. Mais j’ai juste besoin de dépasser cette erreur. Merci

TL; DR

Dans le violon, vous avez une erreur de syntaxe en ne fermant pas iniMap() avec } . En outre, la fonction est définie après le chargement du DOM. Pour résoudre ce problème:

  • définir le type de charge pour envelopper dans ou
  • corriger une erreur de syntaxe

réparer

Voici comment traiter ces derniers.

Portée globale

Placez initMap dans la scope globale. ne placez pas la définition de la fonction dans une scope privée ou anonyme comme

 (function(){ function initMap(){ // } })(); 

DOM onload

Définissez la fonction dans la si possible. ou du moins avant de charger l’API dans . Et ne définissez jamais initMap après le chargement complet du dom, comme window.onload et document.addEventListener('ondomready', callback)

Bonnes pratiques

   

Mauvaises pratiques

window.onload

   

Et

   

Ou $(function(){ }) si vous utilisez jQuery

   

Voici un JSFiddle de la façon dont cela fonctionne.

Placez essentiellement votre fonction au-dessus de l’appel à l’ Google API

   

De plus, la fonction n’était pas correctement fermée.

Vous appelez initMap avant sa déclaration.

https://jsfiddle.net/mp7j7gy0/60/

   var initMap = function() { var map = new google.maps.Map(document.getElementById('map'), { center: { lat: 34.397, lng: 150.644 }, scrollwheel: false, zoom: 2 }); } initMap() 

Je cherchais une réponse sur de nombreux forums, mais je viens de trouver dans mon code qu’il y avait un ‘;’. Après avoir supprimé le ‘;’ tout a bien fonctionné.

Je sais que ce n’est pas la meilleure réponse, mais j’espère que cela aidera quelqu’un.

Je suis tombé sur ce problème aussi, mais dans mon cas, le coupable semble être mod_pagespeed.

Je pense que cela modifie l’ordre des scripts dans la page, donc les solutions précédentes ne fonctionnaient pas. J’ai réussi à le résoudre en ajoutant dynamicment la balise script la carte.