Zurück   PSD-Tutorials.de > Webbereich > PHP und andere Scriptsprachen


Antwort
 
Themen-Optionen
Alt 05.07.2012, 18:45   #1 Nach oben scrollen
log out.dll not found
HelperHelper
 
Benutzerbild von Hansi05
 

Registriert seit: 18.06.2006
Ort: Dresden
Beiträge: 618
Kamera: Digikam @ Kodak EasyShare Z740

JS Variable in Funktion definieren und außerhalb nutzen


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!
__________________
  Mit Zitat antworten


Alt 05.07.2012, 19:26   #2 Nach oben scrollen
Posting-Frequenz: 14µHz
Premium-SupporterPremium-SupporterPremium-SupporterPremium-SupporterPremium-Supporter
 
Benutzerbild von Duddle
 

Registriert seit: 03.02.2006
Ort: Dresden
Beiträge: 3.227

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-Code:
var foo = 42;
function bar() {
    foo = 99;
}
bar();
alert(foo);

Duddle
__________________
»To a cosmologist, a hundred thousand light-years rounds down to zero.« - RobotRollCall
  Mit Zitat antworten
Alt 05.07.2012, 21:10   #3 Nach oben scrollen
log out.dll not found
HelperHelper
Themenstarter
 
Benutzerbild von Hansi05
 

Registriert seit: 18.06.2006
Ort: Dresden
Beiträge: 618
Kamera: Digikam @ Kodak EasyShare Z740

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 latlng = 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?
__________________
  Mit Zitat antworten
Alt 05.07.2012, 21:32   #4 Nach oben scrollen
Posting-Frequenz: 14µHz
Premium-SupporterPremium-SupporterPremium-SupporterPremium-SupporterPremium-Supporter
 
Benutzerbild von Duddle
 

Registriert seit: 03.02.2006
Ort: Dresden
Beiträge: 3.227

Wahrscheinlich kennst du das Konzept "Sichtbarkeitsbereich" (Scope) noch nicht. Ich zitiere mal aus dem Wiki-Artikel:
Zitat:
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
__________________
»To a cosmologist, a hundred thousand light-years rounds down to zero.« - RobotRollCall
  Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
div box und die display funktion wie nutzen? XIIZQ (X)HTML & CSS 9 27.06.2012 15:04
MySQL: WHERE Variable LIKE mit Variable aus Liste BeastyK PHP und andere Scriptsprachen 12 14.10.2010 12:44
Java Variable in PHP Variable umwandeln asupp PHP und andere Scriptsprachen 9 11.11.2009 20:21
Variable in Wert von Variable schreiben GeneralFabi PHP und andere Scriptsprachen 13 24.12.2007 11:09