Antworten auf deine Fragen:
Neues Thema erstellen

JS Variable in Funktion definieren und außerhalb nutzen

Hansi05

Aktives Mitglied

Hallo liebe Leute,

ich ermittle mit einer Funkton den aktuellen Standort des Nutzers und lasse diesen auf der Google-Maps Karte anzeigen (mithilfe der Google Maps API).

Das funktioniert auch soweit, jetzt war nur mein Problem, wie ich den Standwort in eine PHP Variable übergebe, damit ich in einer MySQL Datenbank mit den Werten "spielen" kann.

Das wollte ich mit jQuery lösen:
Code:
    $(window).load(function () {
        $.get("./files/get.AddressData.php?lat="+lati+"&lng="+long, 
            function(text){
                $("#getting_addresses").html(text);
        });
    });
Prinzipiell klappt das, wenn ich über dem o.g. Code die Variablen testweise einfach per var lati = ...; und var long = ...; definiere.

Hier mal der Code, wie ich den Standort ermittle, und den auch noch auf der Karte anzeige:
Code:
function initialize(coords) {
    var latlng = new google.maps.LatLng(coords.latitude, coords.longitude);
    
    var lati = coords.latitude;
    var long = coords.longitude;
    
    var myOptions = {
        zoom: 15,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
          
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
                      
    var akt_pos = new google.maps.InfoWindow ({
        content: latlng.toString(),
        position: latlng,
        map: map,
    });
    var koordinaten = lati+','+long;
    return koordinaten;
}

function start() {
    //Position ermitteln und Karte initialisieren
    navigator.geolocation.getCurrentPosition(function(position){ 
        //initialize(position.coords);
        var koordinaten = initialize(position.coords);
        return koordinaten;
    }, function(){
        document.getElementById('map_canvas').innerHTML = 'Deine Position konnte leider nicht ermittelt werden';
    });
}
Mit den return koordinaten in der Funktion start() will ich die Koordinaten auch außerhalb der Fun ktion nutzen können: var Test =start(); (Die Variable Test will ich dann in jQuery weiterverwenden)
Wenn ich das einfach so in meine "Hauptdatei" rein schreibe, wird auch der Standort wie gewünscht auf der Karte angezeigt, also klappt bis dahin alles.
Nur wenn ich jetzt alert(Test); aufrufe, bekomme ich immer, dass die Variable nicht definiert ist.

Kann mir jemand sagen, warum die nicht definiert ist, aber die Funkion trotzdem funktioniert? (Wenns geht ohne meinen Code komplett umzubauen, auch wenn er sicher verbesserungswürdig ist, aber ich verstehe ihn wenigstens einigermaßen ;))

Vielen Dank schon mal!
 

Duddle

Posting-Frequenz: 14µHz

AW: JS Variable in Funktion definieren und außerhalb nutzen

In start() wird getCurrentPosition mit zwei Parametern aufgerufen. Beide sind anonyme Funktionen. Diese werden für bestimmte Fälle aufgerufen. Soweit hast du das sicher schon bemerkt.

Das Problem dabei ist, dass es getCurrentPosition völlig egal ist, welche Funktionen dabei aufgerufen werden. Insbesondere schert es sich nicht um den Rückgabewert. Dein Rückgabewert kommt zwar irgendwie wieder in getCurrentPosition rein, aber ab dann wird er ignoriert. Es gibt auch (soweit ich sehe) keine Möglichkeit, dass sie den Wert direkt weitergibt, das sieht die API nicht vor.

Dennoch kannst du die Informationen natürlich benutzen, indem du die zu ändernde Variable ausserhalb der anonymen Funktion deklarierst. Dann ist sie global verfügbar.
HTML:
var foo = 42;
function bar() {
    foo = 99;
}
bar();
alert(foo);


Duddle
 

Hansi05

Aktives Mitglied

AW: JS Variable in Funktion definieren und außerhalb nutzen

So, jetzt bin ich schon mal einen kleinen Schritt weiter, die Variable außerhalb der Funktionen zu deklarieren:

Code:
navigator.geolocation.getCurrentPosition(function(position){ 
            var [B]latlng[/B] = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);

            initialize(latlng);
        }, function(){
            document.getElementById('map_canvas').innerHTML = 'Deine Position konnte leider nicht ermittelt werden';
        });
Mir geht es um die Variable latlng, die kann ich aber leider nur durch die anonyme Funktion deklarieren, zumindest soweit das mein Wissenstand über Javascript zulässt. Könntest du mir vllt einen Tipp geben, wie ich die Variable da raus bekomme?
 

Duddle

Posting-Frequenz: 14µHz

AW: JS Variable in Funktion definieren und außerhalb nutzen

Wahrscheinlich kennst du das Konzept "Sichtbarkeitsbereich" (Scope) noch nicht. Ich zitiere mal aus dem Wiki-Artikel:
Unter dem Sichtbarkeitsbereich einer Variablen versteht man den Programmabschnitt, in dem die Variable nutzbar und sichtbar ist.
Die meisten Programmiersprachen setzen diesen Bereich mithilfe von Anweisungsblöcken (das sind die in geschweiften Klammern). Alle darin erstellten Variablen sind nur darin "da".
Code:
function foo() {
  var bar = 21;
  bar = bar * 2;
}
if(true) {
  alert(bar);
}
Hier ist bar nur innerhalb von foo() sicht- und nutzbar. Sobald dieser Bereich verlassen wird, wird die Variable gelöscht.

Ich weiß nicht genau wie JavaScript es macht, aber in der Regel gelten Bereiche "nach innen" weiter, d.h. falls neue Anweisungsblöcke im aktuellen geöffnet werden sind auch dort die schon definierten Variablen sichtbar.
Im Gegenzug dazu funktioniert das nicht "nach aussen" (es sei denn du nutzt globale Variablen).

Lange Rede, kurzer Sinn: Im Moment machst du das:
Code:
function blub() {
  //irgendwas
  var x = bla();
}
Aber dann ist x nach Ende von blub() nicht mehr nutzbar. Ergo musst du es weiter draussen definieren:
Code:
var x;
function blub() {
  //irgendwas
  x = bla();
}
Somit ist x in einem größeren Bereich (lies: in diesem Fall global) und du kannst es funktionsübergreifend nutzen.


Duddle
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben