Objekt nicht global verfügbar - Google Maps API

HeinerK

Erfahrenes Mitglied
Hey,


ich bastle gerade ein wenig mit der Google Maps API herum und möchte eine Karte erstellen und mehrere Punkte darauf (Koordinaten stehen in einer Datenbank) markieren.

Dem Entwicklerhandbuch (http://code.google.com/intl/de/apis/maps/documentation/introduction.html) folgend, habe ich folgenden Javascript-Code in meinem Header:

Code:
			<script src=\"http://maps.google.com/maps?file=api&amp;v=2&amp;key=meinkey&sensor=false\"
					type=\"text/javascript\"></script>
			<script type=\"text/javascript\">
			
				function initialize() {
				  if (GBrowserIsCompatible()) {
					var map = new GMap2(document.getElementById(\"map_canvas\"));
					map.setCenter(new GLatLng(54.605132, 13.072606), 13);
					map.addControl(new GLargeMapControl());
					
					var point = new GLatLng(54.605132, 13.072606);
					map.addOverlay(new GMarker(point));	
					
				  }
				}
				
			</script>


initialize() wird dann über den body-Tag geladen:
Code:
<body onload=\"initialize()\" onunload=\"GUnload()\">

Das funktioniert auch soweit: Die Karte wird erstellt, auf den angegebenen Punkt zentriert und ein Marker gesetzt. Nun möchte ich aber die Marker-Erstellung nicht im Header haben. Später im PHP-Script gibt's ein Schleife, die sich die Zeilen aus der DB holt und dann via

Code:
					var point = new GLatLng($breite, $laenge);
					map.addOverlay(new GMarker(point));

die Punkte anlegen soll.

Jetzt habe ich allerdings das Problem, dass dann das Objekt "map" nicht mehr gefunden wird. Auch der Versuch in der Funktion initialize() das "var" bei der Variablendeklaration wegzulassen um das Objekt map global zu machen bringt da nichts. :-(

Bring mal Licht in die Sache! :)
 
Moin,

Code:
var map = new GMap2(document.getElementById(\"map_canvas\"));

Objekte, die mit dem Schlüsselwort var erstellt werden, sind nur dort sichtbar, wo sie erstellt wurden.

Ergo: Entferne das var
 
Ja. initialize() wird über onload im <body> aufgerufen. Also gleich zu Anfang des HTML-Dokuments.

Die fehlerbehaftete Anweisung steht dann dann irgendwo weiter unten in einem anderen <script type=\"text/javascript\">-Abschnitt.

Packe ich die Anweisung in den gleichen Abschnitt, gibt es scheinbar keine Probleme. Geht das nicht über verschiedene Script-Tags hinweg?
 
OK, ich könnte den ganzen Javascript-Krempel in eine Textdatei schreiben und die einmal im Header includen. Dann wäre ich das Problem los.

Aber scheinbar keine ich mir dann keine php-Schleife bauen, die für jeden auf den Karte einzubauenden Punkt einen eigenen <script type=\"text/javascript\">-Abschnit erzeugt.

Ich kann mir in javascript eine Funktion PunktEintragen() bauen, aber wie rufe ich die dann aus meiner PHP-Schleife heraus auf?
 
Geht das nicht über verschiedene Script-Tags hinweg?

Es geht nicht darum, wo es steht....es geht darum, wann es aufegrufen wird.
Und das muss nach initialize() passieren.

Folgendes sollte bspw. funktionieren:
Code:
<script type="text/javascript">
  function initialize() {
	if (GBrowserIsCompatible()) {
	var map = new GMap2(document.getElementById("map_canvas"));
	map.setCenter(new GLatLng(54.605132, 13.072606), 13);
	map.addControl(new GLargeMapControl());
	var point = new GLatLng(54.605132, 13.072606);
	map.addOverlay(new GMarker(point));	
	return map;
	  }
	return false;
    }
</script>

<!-- irgendwo anders -->
<script type="text/javascript">
  function fx(map) {
  if(map){
    var point = new GLatLng(<?php echo $breite;?>, <?php echo $laenge;?>);
    map.addOverlay(new GMarker(point));
    }
  }
</script>

<body onload="fx(initialize())" onunload="GUnload()">
 
Zurück