ERLEDIGT
NEIN
NEIN
ANTWORTEN
12
12
ZUGRIFFE
403
403
EMPFEHLEN
-
Hallo,
Asynchrone an JS macht mir ein bisschen zu schaffen
Ich will nun meine Database SQLite erstmal Initialisieren und erst dann soll es weitergehen.
Leider geht das irgendwie zu langsam und eine andere funktion will dann schon in die Database schreiben, obwohl sie ja nun noch gar net fertig ist.
Bisschen Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
function initfunc() { initDB(); checkAllDBs(); } function onLoad() { document.addEventListener("deviceready", onDeviceReady, false); } function onDeviceReady() { initfunc(); // ab hier soll es erst weiter gehen wenn wenn initfunc() fertig ist. }
Und was ist der Unterschied zwischen solch einer Funktion:
function blablupp() {
}
und dieser:
blablupp = function() {
}
LG
-
Du musst eben so was in der Art machen:
Code javascript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
function initfunc(fn) { initDB(function() { checkAllDBs(function() { fn(); }); }); } function onLoad() { document.addEventListener("deviceready", onDeviceReady, false); } function onDeviceReady() { initfunc(function() { // ab hier soll es erst weiter gehen wenn wenn initfunc() fertig ist. }); }
Im Prinzip keiner.
-
mmm so richtig will das nicht. ich habs so:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
function initfunc(fn) { initDB(function() { checkAllDBs(function() { fn(); }); }); } function onLoad() { document.addEventListener("deviceready", onDeviceReady, false); } function onDeviceReady() { initfunc(function() { console.log('im onReady'); }); }
in der Konsole wird mir im onReady schon ausgegeben, danach kommt checkAllDBs() seine Ausgabe.
ich gehe in initDB() öffne die Datenbank,
dann muss er in checkAllDBs() kucken ob die Tabellen angelegt sind.
dann darf er mir den log ausgeben. den da könnte ja eine funktion sein die ein Eintrag in eine Tabelle machen sollte.
Ich will ja lernen! Forme mich...
-
Sowohl initDB als auch checkAllDBs müssen natürlich ihre übergebenen Funktionen auch aufrufen.
Am Besten zeigst du mal den ganzen Code.
-
okay...
hier noch initDB & checkAllDBs
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
function initDB(fn) { try { if (!window.openDatabase) { alert('Datenbank wird auf Ihren Gerät nicht unterstützt'); } else { var DBshortName = 'test'; var DBversion = '1.0'; var DBdisplayName = 'testDB'; var DBmaxSize = 11048576; // bytes db = window.openDatabase(DBshortName, DBversion, DBdisplayName, DBmaxSize); } if(db) { console.log('Datenbank inialisiert!'); } else { console.log('Datenbank nicht inialisiert!'); } fn(); //callback } catch(e) { if (e == INVALID_STATE_ERR) { console.log("Falsche Datenbank-Version."); } else { console.log("Unbekannter Fehler "+e+"."); } return; } }
und
Code :1 2 3 4 5 6 7 8 9 10 11 12
function checkAllDBs(fn) { createTable('tabelle_t','id, version, name, expTypeId, revision, country, locality, distance, durances, climby, descents, Max, heightMax, range, able, ableString, typeId, commentCount, rating, price, imgSrc, creator, creationDate, severity, severityString, shortDescription, description, tags, fbLikeCount, downloadCount, viewCount, contact, link, lat, lon, images, trackpointsObj'); createTable('tabelle_p', 'id, lat, lon, images, www, phone, fax, email, text, teaser, zip, ort, name, side, address, src, typeId'); createTable('tabelle_news', 'titles, descriptions, date, id'); fn(); //callback }
-
initDB scheint schonmal synchron zu sein, also kannst du dir da dein callback sparen. Ich vermute mal der einzige asynchrone code versteckt sich in "createTable". Da wäre auch der Quelltext interessant.
-
okay dann brauchst auch noch dann den eintrag dazu:
Code :1 2 3 4 5
function createTable(table, rows) { sql = 'CREATE TABLE IF NOT EXISTS '+dbPrefix+table+' ('+rows+')'; executeQuery(sql,[],function(results){console.log('Create '+dbPrefix+table+' '+ results);}); }
und der executeQuery()
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
function executeQuery($query,data, callback) { //alert(data+' - '+$query); try { if(window.openDatabase) { db.transaction(function(tx) { tx.executeSql($query,[data],function(tx,result){ if(typeof(callback) == "function"){ callback(makeDBArray(result)); } else { if(callback != undefined){ eval(callback+"(result)"); } } }, errorCB, successCB); }); } } catch(e) { console.log(e); } }
-
Du musst einfach Schritt für Schritt durch gehen. In "createTable" hast du die Callback Funktion und machst nichts weiter als ein console.log. An der Stelle musst du dem Aufrufer aber noch sagen, dass du fertig bist.
Code javascript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
function initfunc(fn) { initDB(function(); checkAllDBs(function() { fn(); }); } function onLoad() { document.addEventListener("deviceready", onDeviceReady, false); } function onDeviceReady() { initfunc(function() { // ab hier soll es erst weiter gehen wenn wenn initfunc() fertig ist. }); }
Code javascript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
function checkAllDBs(fn) { createTable('tabelle_t','id, version, name, expTypeId, revision, country, locality, distance, durances, climby, descents, Max, heightMax, range, able, ableString, typeId, commentCount, rating, price, imgSrc, creator, creationDate, severity, severityString, shortDescription, description, tags, fbLikeCount, downloadCount, viewCount, contact, link, lat, lon, images, trackpointsObj', function() { createTable('tabelle_p', 'id, lat, lon, images, www, phone, fax, email, text, teaser, zip, ort, name, side, address, src, typeId', function() { createTable('tabelle_news', 'titles, descriptions, date, id', function() { fn(); }); }); }); }
Code javascript:1 2 3 4 5 6 7
function createTable(table, rows, fn) { sql = 'CREATE TABLE IF NOT EXISTS '+dbPrefix+table+' ('+rows+')'; executeQuery(sql,[],function(results) { console.log('Create '+dbPrefix+table+' '+ results);} fn(); ); }
Aber du machst es dir glaube ich unnötig kompliziert. tx.executeSql kann mehrfach ausgerufen werden, um mehrere Queries abzusetzen.
-
na ich habe das problem das die funktion die den query absetzen will, den executeQuery ein overlow verursacht... habe auch diese fehler meldung
Storage.executeSql(): Error=bind or column index out of range:
-
In welcher Zeile ist dieser Fehler?
Ich kann nur raten: Du übergibst executeQuery als "data" ein leeres Array [] und umschließt es dann beim Aufruf von executeSql nochmal mit eckigen Klammern. Also übergibst du ein leeres, zweidimensionales Array [[]].
Das ist aber wirklich nur in blaue geraten.
-
na ich fülle das so
Code :1 2
data = [data[0], data[1]]; //usw
im executeQuery() komm das dann schon an, aber ich denke als string.
man soll es so bauen
Code :1 2 3 4
var data = ['1','chris','2000-02-22 00:00:00.000','170','60', '20', '0']; transaction.executeSql("INSERT INTO measurements(id, user, date, height, weight, bmi, abnormal) VALUES (?, ?, ?, ?, ?, ?, ?)", [data[0], data[1], data[2], data[3], data[4], data[5], data[6]]);
ich habe die inhalte von data anders gemacht...
Code :1 2 3
var data = [title, description, dateModified, id, sType]; //das sind variablen
ist falsch?
-
Ich sehe da keinen Fehler. Die Fehlermeldung deutet darauf hin, dass mit der Anzahl was nicht stimmt. Aber du hast genau so viele Fragezeichen (Platzhalter) wie Spalten und Werte in dem Array. Ich weiß da nicht weiter, habe selbst noch nie mit der Datenbank gearbeitet.
-
ja irgendwie ist das mit Phonegap nicht das ware. der Zeigt mir auch wie er Lustig ist an ob er nun Online oder Offline ist. Ich hänge heir schon wieder Stunden ohne erfolg.. Vielleicht liegt es auch am Smartphone.
ab und zu kommt auch sowas:
01-07 15:44:32.216: E/JavaBinder(1139): ****** FAILED BINDER TRANSACTION ******
So ein Käse
Kein richtiges Debbuging mit Eclipse möglich. Zeigt mir nur das an was ich mit jeder herkömmlichen Konsole auch geht und der misstige Fileexplorer geht auch nicht.
Ich mache Schluss für Heute, sonst dreh ich hier noch durch.
Danke für deine Hilfe!
Ähnliche Themen
-
funktion soll warten bis fertig geladen
Von luchs3 im Forum Javascript & AjaxAntworten: 6Letzter Beitrag: 17.09.10, 07:29 -
AddEventListener: Auf Funktion warten
Von Seberoth im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 28.12.09, 17:17 -
in JavaScript-Funktion auf return warten
Von riseX im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 26.11.07, 11:59 -
Auf Funktion warten
Von lindin im Forum VisualStudio & MFCAntworten: 9Letzter Beitrag: 29.07.04, 12:50 -
SQL Funktion starten ohne auf die Antwort zu warten
Von goout im Forum ASPAntworten: 0Letzter Beitrag: 06.05.04, 10:57





Zitieren


Login





