Javascript 如何将参数传递给PhoneGap数据库事务执行SQL函数
我是PhoneGap的新手,我正在使用数据库,它可以很好地使用下面的代码Javascript 如何将参数传递给PhoneGap数据库事务执行SQL函数,javascript,ios,cordova,jquery-mobile,Javascript,Ios,Cordova,Jquery Mobile,我是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: " +
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;
}
错误是TypeError:“未定义”不是catch块中的函数
,有人能帮我解决这个问题吗?。
提前感谢executeSql函数需要4个参数,请尝试以下操作:
function errorCallback(err){
//show error
}
...
tx.executeSql(sql, [],getList_success,errorCallback);
看看你的代码:
db.事务(获取详细信息,事务错误)
获取详细信息
查看您声明的函数:
函数getUserDetails(tx){…}
函数getList_success(tx,results){….}
getDetails不是getUserDetails
这就是为什么会出现错误。问题是您正在将回调函数移交给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线程将继续运行,并且可以在事务仍在进行时执行完整的回调。将db对象传递给函数,而不是事务
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);
}