2009-12-03 5 views
2

J'espère que quelqu'un pourra résoudre ce problème (j'espère simple) que j'ai.Problème Google Maps/Javascript avec la carte 'undefined'

Nous avons une carte Google Map tirant des données géocodées d'un service Web, ce qui renvoie un tableau de résultats. De plus, il géocode le code postal de l'utilisateur au Royaume-Uni et trace un marqueur «maison» jaune sur son emplacement sur la carte.

Cela fonctionne très bien dans IE, mais le marqueur ne s'affiche pas dans Safari ou Firefox.

Dans la console d'erreur de Firefox, nous obtenons 'map is undefined'. Je l'ai réduit à la ligne, mais je ne peux pas trouver un moyen de résoudre ce problème pour le moment.

~ Notez que mon code n'est pas encore simplifié, donc il y a peut-être du code js inutile là-bas. Mais je voudrais être en mesure de Beta Test avec nos utilisateurs sous peu. ~

Lien vers le service ....

http://www.stratford.gov.uk/labs/nhs/

Entrez CV37 6HX comme code postal de test, et choisissez à partir de l'une des options du bouton radio avant de chercher.

À la votre!

Simon

+0

J'ai eu une erreur dans IE7: la carte a une valeur nulle ou n'est pas un objet. –

+0

Microsoft Script Debugger localise l'erreur sur map.addOverlay (usermarker); dans la fonction localSearch2.setSearchCompleteCallback –

+0

Oui, c'est la ligne que je regardais. Aucune suggestion? –

Répondre

2

Lorsque j'analyse l'erreur dans IE7, je vois que la variable de la carte est définie lorsque vous obtenez le rappel qui déclenche localSearch2.setSearchCompleteCallback.

Vous devez vérifier que la fonction loadMap() qui initialise la carte s'est terminée avec succès avant de lancer la recherche. Je vois que vous l'initialisez avec

google.setOnLoadCallback(loadMap); 

Cela va seulement charger la carte sur l'événement "load". Il semble que votre rappel est déclenchée trop tôt, avant que la carte est initialisé: vous déclenchez la recherche lorsque vous appelez

newMarker2(UserPostcode, UserIcon); 

Cela se fait lors de l'exécution, avant que la fonction LoadMap se déclenche par l'événement « de charge ».

+0

OK, est-ce un simple changement de code? Je ne suis en aucun cas un expert javascript! –

+1

Oui, assez simple: vous devez déplacer l'appel à newMarker2 à l'intérieur de loadMap, après le code qui crée et configure la carte. –

+0

parfait, plus d'erreurs dans Firefox ou Safari! Merci :) –

0

La meilleure façon de voir ce qui se passe ici est de placer un point d'arrêt sur la ligne 31 et la ligne 153 dans firebug. De cette façon, vous verrez que "map.addOverlay (usermarker);" est appelé avant que la carte ne soit initialisée à la ligne 31.

Vous avez un peu de code sous la ligne de commentaire "/// Mapper l'emplacement de l'utilisateur, en géocodant leur code postal" qui ne se trouve pas dans une fonction. Le code qui n'est pas exécuté par une sorte de callback onload peut être exécuté à tout moment par le navigateur (généralement, mais pas toujours, une fois que la balise javascript entière est chargée). C'est pourquoi vous voyez un comportement incohérent dans différents navigateurs. Dans le pire des cas, il peut même être incohérent de recharger pour recharger. Pour corriger cela, vous devez placer ce code dans une fonction et l'appeler comme vous le faites pour la fonction loadMap ("google.setOnLoadCallback (loadMap);") ou simplement l'appeler depuis la fonction loadMap.

Espérons que cela aide.

+0

Merci Franz, cela a certainement été une courbe d'apprentissage pour moi. Je vais voir si je peux réparer ça avec ces changements, merci! –