I am bulding a table that either shows a play button or a stop button. (and some other stuff)
for(var i = 0; i < result.length; i++){
var current = result[i].split("$");
if (CheckRunning(current[0])){
t = t + "<tr><td><img alt='stop' id='img"+i+"' src='stop.png' onclick='ChangeButton(\"img"+i+"\");'/>";
} else {
t = t + "<tr><td><img alt='play' id='img"+i+"' src='play.png' onclick='ChangeButton(\"img"+i+"\");'/>";
}}
The problem here is the CheckRunning method. It opens a database which is an asynchron method. I cant simply do a return true/false. So whats the solution? anyway, here is the code for it:
var tabel;
var running = false;
function CheckRunning(tabel){
this.tabel = "tabel"+tabel+"";
var db = window.openDatabase(this.tabel, "1.0", this.tabel, 1000000);
db.transaction(checkrunningDB, checkerrorCB);
console.log(this.running);
return this.running;
}
function checkrunningDB(tx) {
tx.executeSql('SELECT max(id), sluttime FROM '+this.tabel, [], checkrunningSuccess, checkerrorCB);
}
function checkrunningSuccess(tx, results) {
if (results.rows.item(0).sluttime != null){
this.running = false;
} else{
this.running = true;
}
}
function checkerrorCB(err) {
this.running = false;
console.log(err);
}
Pass a callback function to
CheckRunning:It’s similar to your
tx.executeSqlfunction which takes checkRunningSuccess as a callback. In that case the function name is hard coded as checkRunningSuccess, you could do the same in checkRunning.By the way, if this is a public webapp running SQL queries makes you vulnerable to SQL injection attacks.