Return ist leer

Strafi

Erfahrenes Mitglied
Hallo,

ich habe ein Problem mit er Rückgabe.

Mein code:


HTML:
<script>

    function selectData(){
	db = initDB();
	db.transaction(function(tx) {
	tx.executeSql('SELECT * FROM kneipe_event', [], function(tx, rs) {
	    
	var stEvents = "";
	var heki = "eventListBg";
	var fr = "fr";
	var bg = "1";
	var Wochentag = new Array("SO", "MO", "DI", "MI", "DO", "FR", "SA");
	    
	    
	  for(var i = 0; i < rs.rows.length; i++) {
	   
	    var ive = giveMe(rs.rows.item(i).datum);
	    var iv = new Date(ive[0], ive[1], ive[2],0,0,0);
	    var ives = Wochentag[iv.getDay()];
	    
	    stEvents = stEvents + '{"bg":"' + bg + '","heki":"' + heki + '","fr":"' + fr + '","id":"' + rs.rows.item(i).id + '","titel":"' + rs.rows.item(i).titel + '","tag":"' + ive[2] + '","monat":"' + ive[1] + '","jahr":"' + ive[0] + '","tagName":"' + ives + '","artist":"' + rs.rows.item(i).titel + '"},';
	    
	    if(bg == "1") {
		bg = "2";
		heki = "heki";
		fr = "";
	    } else {
		bg = 1;
		heki = "eventListBg";
		fr = "fr";
	    }
    
	
	}
	
	    stEvents = stEvents.substr(0, stEvents.length-1); 	
	    call = "[" +stEvents+ "]";
	    //console.log(call);
	    //return call;
	  
	});
      });
    }

function onOffline() {
	
	var sqlData = selectData();
	console.log(sqlData);
    
    }

</script>

Mit der Funktion onOffline hole ich mir ein JSON String. Der String wird unter der Funktion selectData() auch richtig zusammengestellt und in die Variable Call geschrieben.

Wenn ich nun call zurückgegeben lasse an onOffline ist das undefine.

An welcher Position muss denn nun das return call? ich habe es schon mehrmals mit anderen Positionen durchgespielt. console.log(call); unterhalb der for-schleife zeigt mir aber den Inhalt an.

Ist zum Mäuse melken.


Grüße
 
Da die Datenbankabfrage asynchron ist, kannst du den Wert nicht als Rückgabewert benutzen. Du musst der Funktion selectData als Parameter ebenfalls eine Funktion übergeben, die innerhalb der callback Funktion von executeSql aufgerufen wird.
 
Ich füge es mal in deinen Code ein, ohne es zu testen. Falls es nicht sofort lauffähig ist, siehst du zumindest, was ich meine. Es mussten praktisch nur drei Zeilen geändert werden!

Javascript:
function selectData(fn){
	db = initDB();
	db.transaction(function(tx) {
		tx.executeSql('SELECT * FROM kneipe_event', [], function(tx, rs) {

			var stEvents = "";
			var heki = "eventListBg";
			var fr = "fr";
			var bg = "1";
			var Wochentag = new Array("SO", "MO", "DI", "MI", "DO", "FR", "SA");


			for(var i = 0; i < rs.rows.length; i++) {

				var ive = giveMe(rs.rows.item(i).datum);
				var iv = new Date(ive[0], ive[1], ive[2],0,0,0);
				var ives = Wochentag[iv.getDay()];

				stEvents = stEvents + '{"bg":"' + bg + '","heki":"' + heki + '","fr":"' + fr + '","id":"' + rs.rows.item(i).id + '","titel":"' + rs.rows.item(i).titel + '","tag":"' + ive[2] + '","monat":"' + ive[1] + '","jahr":"' + ive[0] + '","tagName":"' + ives + '","artist":"' + rs.rows.item(i).titel + '"},';

				if(bg == "1") {
					bg = "2";
					heki = "heki";
					fr = "";
				} else {
					bg = 1;
					heki = "eventListBg";
					fr = "fr";
				}


			}

			stEvents = stEvents.substr(0, stEvents.length-1); 	
			call = "[" +stEvents+ "]";
			//console.log(call);
			//return call;

			fn(call);

		});
	});
}

function onOffline() {
	selectData(function(sqlData) {
		console.log(sqlData);
	});
}
 

Neue Beiträge

Zurück