我是PhoneGap的新手,我正在使用数据库,并且使用以下代码正常工作
db = window.openDatabase("Sample", "1.0", "PhoneGap Demo", 200000);
db.transaction(getDetails, transaction_error);
function transaction_error(tx, error) {
$('#busy').hide();
alert("Database Error: " + error);
}
function getUserDetails(tx) {
var sql = "select id, Name, DisplayName from details where Name=Name";
try {
tx.executeSql(sql, [],getList_success);
}
catch(err)
{
alert(err);
}
}
function getList_success(tx, results)
{
var len = results.rows.length;
for(var i=0; i <len; i++)
{
//Some code goes here
}
db = null;
}
现在我想通过传递参数来使用函数getUserDetails
和getList_success
,我尝试了以下代码给出错误
db = window.openDatabase("Sample", "1.0", "PhoneGap Demo", 200000);
getUserDetails(db);
function getUserDetails(tx) {
var sql = "select id, Name, DisplayName from details where Name=Name";
try {
tx.executeSql(sql, [],getList_success);
}
catch(err)
{
alert(err);
}
}
catch块中的错误是TypeError:'undefined' is not a function
,任何人都可以帮我解决这个问题吗?
提前致谢
答案 0 :(得分:1)
executeSql函数需要4个参数,试试这个:
function errorCallback(err){
//show error
}
...
tx.executeSql(sql, [],getList_success,errorCallback);
答案 1 :(得分:1)
问题是您正在将回调函数移交给db.transaction。如果要向被调用者提供一些数据,则必须使用闭包在调用者的上下文中提供此数据。
var db = window.openDatabase("Sample", "1.0", "PhoneGap Demo", 200000);
var context = {val1: 'x', val2: 'y'};
db.transaction(function(tx){
myfunction(tx,context);
},
tx_error,
tx_success);
function myfunction(ty,context){
tx.executeSql(query,[context.val1,context.val2],myf_success,myf_error);
}
请记住,这发生在新线程中!因此,如果调用db.transaction,请注意这与调用者同时发生。如果是你从jQuery.ajax()调用的成功回调中调用db.transaction(),ajax线程将运行,并且在事务仍在进行时可以执行完整的回调。
答案 2 :(得分:-1)
看看你的代码:
db.transaction(getDetails,transaction_error);
getDetails!
查看您声明的函数:
function getUserDetails(tx){...}
function getList_success(tx,results){....}
getDetails不是getUserDetails ....
这就是你收到错误的原因。