How can I get the following JavaScript to return row
so I can access it outside the transaction? All of Apple's example code seems to have HTML written to the browser within the transaction instead of ever passing data back to a calling function.
Along the lines of:
function getData() {
db.transaction(function(tx) {
tx.executeSql("SELECT id FROM table LIMIT 1", [], function(tx, result) {
row = result.rows.item(0);
}, function(tx, error) {
});
});
return row;
}
Is this even possible? Can the Webkit storage API be set to synchronous instead of asynchronous execution?
I think you want to create a closure here as values are being garbage collected/moved away from the scope chain before you can access them. Pass row
to a closure for access later or to some other function that can handle the value while it's still in scope.
More info: Working With Closures
I realise this is a very old question but I found it when searching for how to deal with JavaScript asynchronous SQLite calls. And the question is the same as mine and I've found a better answer (Expands on the selected answer, using closures)
my version of your getData function is as follows:
function get_option (option, get_option_callback){
if (db === null){
open_database();
}
db.transaction(function (tx) {
tx.executeSql("SELECT rowid,* FROM app_settings WHERE option = ? ", [option],
function(tx, result){
item = result.rows.item(0);
get_option_callback(item.value);
return;
}
}, sql_err);
});
}
Then to call the method I would use:
get_option("option name", function(val){
// set the html element value here with val
// or do whatever
$('input[name="some_input"]').val(val);
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With