Closure und globale Variable

WootWoot

Grünschnabel
Hallo zusammen,

ich habe Schwierigkeiten den folgenden Verlauf meines Scripts zu verstehen.

Code:
<!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN"   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Google Maps JavaScript API Example</title>
<script
	src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAA_4ue-V3I49uuecaBVS6fjRTlUZlA5wIvW33bqFl7SyVhglxhRBS4UiuPrtevUxLgjhstNLwTOLdvOA"
	type="text/javascript">
</script>

<script type="text/javascript">

var map = null;
var geocoder = null;
var koordinaten = null;

    function initialize() 
    {
      if (GBrowserIsCompatible()) 
      {
        map = new GMap2(document.getElementById("map_canvas"));
        map.setCenter(new GLatLng(50.290, 6.500), 10);
        geocoder = new GClientGeocoder();
      }
    }
                    
     function showAddress(address) 
     {   		    		    	   		
     	geocoder.getLatLng(address,    //Funktion von Google Maps; in point sind die Koordinaten gespeichert
        function(point) 
        {     
        koordinaten = point;     	
        });
           		
        alert(koordinaten);//hier erscheint null
        alert(koordinaten);//hier werden die korrekten Koordinaten angegeben               
   	 }
                  
</script>
</head>
<body onload="initialize()">
<div id="map_canvas" style="width: 500px; height: 300px"></div>
<button onclick="javascript: showAddress('Cologne, Germany, Hohenzollernring');">Show</button>
</body>
</html>

Und zwar erscheinen erst beim 2. Alert die richtigen Koordinaten. Ich verstehe nicht warum. Ich komme von der Java-Fraktion und da ist es kein Problem den Code so zu schreiben. Weiß jemand von euch, warum beim ersten Aufruf von Alert "null" zurückgegeben wird, obwohl die Zuweisung vorher erfolgt und wie ich das lösen könnte?

Viele Grüße
Wootwoot
 
Hi,
das wird wahrscheinlich daran liegen, dass der Geocoder des GoogleMaps Servers beim ersten Alert einfach noch nicht fertig ist. Arbeite mit "return", dann sollte das Problem behoben sein.
Also statt dem alert
Code:
return koordinaten
Und im onclick Event des Buttons:
Code:
alert(showAddress('Cologne, Germany, Hohenzollernring'));

Dann sollte es klappen.


Gruß

.:lay-z-cow:.
 
Leider ist es immer noch so.
Beim ersten klicken auf den Button wird "null" zurückgegeben und beim zweiten klicken dann die korrekten Koordinaten.

Code:
<!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN"   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Google Maps JavaScript API Example</title>
<script
	src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAA_4ue-V3I49uuecaBVS6fjRTlUZlA5wIvW33bqFl7SyVhglxhRBS4UiuPrtevUxLgjhstNLwTOLdvOA"
	type="text/javascript">
</script>

<script type="text/javascript">

var map = null;
var geocoder = null;
var koordinaten = null;

    function initialize() 
    {
      if (GBrowserIsCompatible()) 
      {
        map = new GMap2(document.getElementById("map_canvas"));
        map.setCenter(new GLatLng(50.290, 6.500), 10);
        geocoder = new GClientGeocoder();
      }
    }
                    
     function showAddress(address) 
     {   		    		    	   		
     	geocoder.getLatLng(address,    //Funktion von Google Maps; in point sind die Koordinaten gespeichert
        function(point) 
        {     
        koordinaten = point;     	
        });
           		
        return koordinaten;                     
   	 }
                  
</script>
</head>
<body onload="initialize()">
<div id="map_canvas" style="width: 500px; height: 300px"></div>
<button onclick="javascript: alert(showAddress('Cologne, Germany, Hohenzollernring'));">Show</button>
</body>
</html>
 

Neue Beiträge

Zurück