• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

HTML5 SQL Lite: Rückgabe vom Select einer Java Funktion übergeben funktioniert nicht

Stefan-S

Neues Mitglied
HTML5 SQL Lite: Rückgabe vom Select mit einer Javascript Funktion übergebn geht nicht

Hallo erstmal :)

Ich bastel hier gerade ein wenig mit der SQL Lite Geschichte von HTML5 rum und dabei habe ich ein kleines Problem:

Grundsätzlich habe ich kein Problem damit Ergebnisse aus einer SQL-Abfrage zu benutzen:

Code:
function getPerson(id){
db.transaction(function (tx) {
    tx.executeSql('SELECT * FROM person where id = ?', [id], function (tx, results) {
       var row = results.rows.item(0);
       alert(row.name);
       return row;
       });
    });
}

Hier zeigt mir das alert also den Namen der Person an. Nun möchte ich aber diese "row" auch in einer anderen Funktion weiterbenutzen. Das mache ich dann so:

Code:
function test() {
    var person = getPerson(12);
    alert(person.name);
}

Das Problem ist nun aber, dass das nicht funktioniert. Wenn ich nur "alert(person)" benutze steht da dann auch "undefined" statt "[Object object]", was darauf hindeutet, dass da irgendwie der Rückgabewert nicht gescheit ankommt. An der Id liegt es übrigens nicht, da ich für beide Funktionen die gleiche Id benutze und somit immer ein Datensatz vorhanden ist.

Hat da jemand eine Idee woran das liegen kann? Ich muss dazu sagen, dass ich quasi keine Erfahrung mit Javascript habe und das jetzt einfach für das SQL Geraffel brauche...
 
Zuletzt bearbeitet:
Ich habe mit SQL Lite noch nicht gearbeitet, aber nach kurzer Recherche konnte ich dein Problem zumindest konkretisieren:

Dein Problem liegt daran, dass executeSQL ein asynchroner Funktionsaufruf ist, es wird also nicht auf deren Rückgabe gewartet, sondern der folgende Code wird quasi zeitgleich ausgeführt. In diesem Moment ist die Variable person natürlich nicht mit Inhalt gefüllt, da die eigentliche SQL Abfrage noch läuft.

Schau mal hier auf StackOverflow, das entspricht ziemlich deiner Fragestellung. Auf die Schnelle kann ich jetzt nicht die dort vorgeschlagene Lösung auf dein Beispiel anpassen, aber vielleicht kommst du damit ja selbst zurecht ;-)
 
Ah wunderbar danke. Dann weiß ich schonmal dass es tatsächlich ein Problem für meinen speziellen Fall ist und ich nicht generell Javascript falsch benutzt habe. Werd mir das mal ansehen :)
 
Zurück
Oben