Anzeige

Javascript Variable außerhalb einer Funktion

Javascript Variable außerhalb einer Funktion | PSD-Tutorials.de

Erstellt von Philipp88, 10.07.2014.

  1. Philipp88

    Philipp88 Nicht mehr ganz neu hier

    Dabei seit:
    18.06.2012
    Beiträge:
    163
    Geschlecht:
    männlich
    Javascript Variable außerhalb einer Funktion
    Hallo,

    ich habe eine Javascript- Funktion geschrieben, welches die lat lon Werte ermittelt.
    Leider sind aber die Variablen die ich innerhalb von geocode setze, außerhalb von dieser Funktion für die Weitervereibung sichtbar (beispielt wo mein alert steht)

    Mein Code:

    Code (Text):
    1. function address() {
    2.    
    3.     var zip = $("#inputZip").val();
    4.       var geocoder = new google.maps.Geocoder();
    5.       geocoder.geocode({'address': zip}, function(results, status) {
    6.         if (status == google.maps.GeocoderStatus.OK) {
    7.           var lat = results[0].geometry.location.lat();
    8.           lon = results[0].geometry.location.lng();
    9.         } else {
    10.           alert("Something got wrong " + status);
    11.         }
    12.        
    13.       });
    14.       alert(lat +" x "+lon);
    15.     }
    Wäre für jede Hilfe sehr dankbar :)

    vg.
    Philipp
     
    #1      
  2. lachender_engel

    lachender_engel Aktives Mitglied

    Dabei seit:
    23.03.2009
    Beiträge:
    1.280
    Geschlecht:
    männlich
    Ort:
    Die Welt
    Software:
    Adobe Creative Suite CS6 Design & Web, Notepad++, IrfanView, Jetbrains PhpStorm
    Kameratyp:
    Nikon D7200
    Javascript Variable außerhalb einer Funktion
    Da Du keine Frage stellst, kann ich nur raten und verstehe Dein Problem nicht.
    Du gibst per alert die ermittelten Datren doch INNERHALB Deiner Funktion address aus. Und das ist falsch?
     
    #2      
  3. Pixelaner

    Pixelaner Der Pixelaner

    Dabei seit:
    03.04.2008
    Beiträge:
    261
    Geschlecht:
    männlich
    Ort:
    Essen
    Javascript Variable außerhalb einer Funktion
    Dürfte eigentlich aber nicht passieren dank des Scopes. Dieses besagt, dass in der Funktion deklarierte Variablen lokale Variablen sind und diese nur für diese Funktion verwendet werden.
     
    #3      
  4. Philipp88

    Philipp88 Nicht mehr ganz neu hier

    Dabei seit:
    18.06.2012
    Beiträge:
    163
    Geschlecht:
    männlich
    Javascript Variable außerhalb einer Funktion
    Sorry ich mein natürlich nicht sichtbar.

    Die Variablen in alert sind "undefiniert" , obwohl ich die Variablen in der Funktion oberhalb definiert habe.
    Wie kann ich wie Pixelaner andeutet die Variablen global setzen?
     
    #4      
  5. mindraper

    mindraper me[code].Java(Script)

    Dabei seit:
    12.08.2007
    Beiträge:
    213
    Geschlecht:
    männlich
    Ort:
    Zuhause
    Software:
    Adobe CS5 (PS/I/ID/Bridge/FL), Sublime Text 2, NetBeans, Blender, Pencil
    Javascript Variable außerhalb einer Funktion
    moinsen,

    einfach alle variablen im gültigkeitsbereich von address() deklarieren, nicht erst innerhalb des callbacks von geocoder.geocode().

    Also statt
    einfach so
    Code (Text):
    1. function address() {
    2.     var zip = $("#inputZip").val(),
    3.         geocoder = new google.maps.Geocoder(),
    4.         lat,
    5.         lon;
    6.  
    7.     geocoder.geocode({'address': zip}, function(results, status) {
    8.         if (status === google.maps.GeocoderStatus.OK) {
    9.             lat = results[0].geometry.location.lat();
    10.             lon = results[0].geometry.location.lng();
    11.         } else {
    12.             alert("Something got wrong " + status);
    13.         }
    14.     });
    15.     alert(lat +" x "+lon);
    16. }
    die callback funktion, die als zweites argument an geocoder.geocode() übergeben wird eröffnet natürlich einen neuen gültigkeitsbereich, der darin deklarierte variablen nach außen hin wieder abschirmt. daher kann dein äußeres alert() die inneren variablen natürlich nicht sehen.

    ein weiterer fehlergrund kann sein (vermutung, hab gerade nicht im kopf ob der geocoder asynchron arbeitet – ich gehe aufgrund des API aber mal schwer davon aus) bzw. ist mit relativ hoher sicherheit, dass dein äußeres alert() ausgeführt wird, bevor der geocoder eine antwort gesendet hat. damit sind die variablen "lat" und "lon" natürlich undefined zur zeit des aufrufs vom äußeren alert(). in diesem fall als test bitte das äußere alert() ebenfalls innerhalb der callback funktion aufrufen.

    übrigens erzeugst du in deinem code eine neue globale variable namens "lon", da diese nicht mit einem var-statement deklariert wird. ist in meinem beispiel bereinigt. du solltest generell das erzeugen von globalen variablen so weit wie irgend möglich (also im ernstfall bis auf maximal eine einzige!) vermeiden, da diese den globalen namensraum (window) "zumüllen" und es extrem leicht passieren kann, dass sie unabsichtlich überschrieben werden. das führt ab einer gewissen menge von globalen variablen i. d. r. zu fehlern, die extrem schwer zu debuggen sind.

    hoffe das hilft
     
    Zuletzt bearbeitet: 10.07.2014
    #5      
  6. Philipp88

    Philipp88 Nicht mehr ganz neu hier

    Dabei seit:
    18.06.2012
    Beiträge:
    163
    Geschlecht:
    männlich
    Javascript Variable außerhalb einer Funktion
    Ich habe es jetzt so abgeändert wie du gesagt hast. Sie sind leider immer noch undefiniert :(

    Code (Text):
    1.     function address() {
    2.       var zip = $("#inputZip").val(),
    3.       geocoder = new google.maps.Geocoder(),
    4.       lat,
    5.       lon;
    6.    
    7.       geocoder.geocode({'address': zip}, function(results, status) {
    8.         if (status == google.maps.GeocoderStatus.OK) {
    9.           lat = results[0].geometry.location.lat();
    10.           lon = results[0].geometry.location.lng();
    11.         } else {
    12.           //alert("Something got wrong " + status);
    13.         }
    14.         $("#geo").val(lat + "x" + lon);
    15.       });
    16.    
    17.       alert(lat +" x "+lon);
    18.     }
     
    Zuletzt bearbeitet: 11.07.2014
    #6      
  7. mindraper

    mindraper me[code].Java(Script)

    Dabei seit:
    12.08.2007
    Beiträge:
    213
    Geschlecht:
    männlich
    Ort:
    Zuhause
    Software:
    Adobe CS5 (PS/I/ID/Bridge/FL), Sublime Text 2, NetBeans, Blender, Pencil
    Javascript Variable außerhalb einer Funktion
    moinsen,

    aufgrund deiner antwort muss ich davon ausgehen, dass du meinen post nicht gelesen hast oder dass noch etwas anderes an deinem code nicht so läuft wie es soll.

    wo stellst du denn fest, dass die variablen undefined sind? falls durch das letzte alert() => siehe meinen letzten post, vorletzter absatz.
    falls im element mit der id "geo" die werte nicht exakt ankommen, kann das daran liegen, dass
    1. du die werte falsch abgreifst (via results[0].geometry. etc)
    2. das element mit der id "geo" kein input-element ist und val() daher nicht funktioniert
    3. der geocoder nicht den status "OK" liefert und du es nicht erfährst, weil das innere alert() auskommentiert ist
    übrigens ist alert() ein sehr sehr eingeschränktes werkzeug zum "debuggen" (sofern man das überhaupt so nennen kann). besser du benutzt die konsole oder das debugger keyword.
     
    #7      
  8. afr0kalypse

    afr0kalypse Allwissendes Karmameerschweinchen!

    Dabei seit:
    09.11.2005
    Beiträge:
    819
    Geschlecht:
    männlich
    Ort:
    Mi Casa
    Software:
    paint, notepad++
    Kameratyp:
    Canon EOS 40d
    Javascript Variable außerhalb einer Funktion
    Das Script funktioniert, allerdings wird die Funktion geocode oder der GeocoderStatus etwas Zeitversetzt (asynchron? ajax?) versendet.
    Wenn zip ein korrekter String ist gibt
    Code (Text):
    1.  
    2. if (status == google.maps.GeocoderStatus.OK) {
    3.        lat = results[0].geometry.location.lat();
    4.        console.log(lat);
    5.        lon = results[0].geometry.location.lng();
    6.        console.log(lon);
    7. ...
    8.  
    auf der Konsole auch Werte aus.
     
    #8      
  9. Philipp88

    Philipp88 Nicht mehr ganz neu hier

    Dabei seit:
    18.06.2012
    Beiträge:
    163
    Geschlecht:
    männlich
    Javascript Variable außerhalb einer Funktion
    Ja stimmt die Variable wird zeitverzögert ausgeliefert und deswegen war es undefiniert.
    Ich habe jetzt einfach ein Timeout gesetzt bis alert ausgegeben wird.
     
    #9      
x
×
×