【问题标题】:how to pass arguments to PhoneGap database transaction executeSql functions如何将参数传递给PhoneGap数据库事务executeSql函数
【发布时间】:2013-04-01 11:12:08
【问题描述】:

我是 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;
}

现在我想通过传递参数来使用函数getUserDetailsgetList_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,任何人都可以帮我解决这个问题吗? 提前致谢

【问题讨论】:

  • 你传递给函数一个 db 对象而不是一个事务

标签: javascript ios cordova jquery-mobile


【解决方案1】:

executeSql函数需要4个参数,试试这个:

function errorCallback(err){
//show error
}
...
tx.executeSql(sql, [],getList_success,errorCallback);

【讨论】:

    【解决方案2】:

    问题是您将回调函数移交给 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 线程将在其上运行,并且可以在事务仍在进行时执行完整的回调。

    【讨论】:

      【解决方案3】:

      看看你的代码:

      db.transaction(getDetails, transaction_error);

      获取详细信息!

      看看你声明的函数:

      函数 getUserDetails(tx) {...}

      function getList_success(tx, results) {....}

      getDetails 不是 getUserDetails....

      这就是您收到错误的原因。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-31
        • 1970-01-01
        • 2015-10-30
        • 1970-01-01
        • 2019-09-01
        • 1970-01-01
        • 2013-01-27
        相关资源
        最近更新 更多