db.transaction,首先是错误回调或成功回调

时间:2013-12-11 08:42:16

标签: html5 sqlite cordova transactions

我正在构建一个Phone Gap应用程序,并在此documentation中使用db.transaction函数。我在db.transaction函数中看到有关参数顺序的一些相互矛盾的信息,我希望有人可以解释我看到的差异。

在下面的示例中,错误回调是第二个参数,成功回调是第三个参数:

function populateDB(tx) {
     tx.executeSql('DROP TABLE IF EXISTS DEMO');
     tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
     tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
     tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
}

function errorCB(err) {
    alert("Error processing SQL: "+err);
}

function successCB() {
    alert("success!");
}

var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
db.transaction(populateDB, errorCB, successCB);

这是另一个成功回调是第三个参数而错误回调是第四个参数的例子。

function populateDB(tx) {
        tx.executeSql('DROP TABLE IF EXISTS DEMO');
        tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
        tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
        tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
    }

    function queryDB(tx) {
        tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);
    }

    function querySuccess(tx, results) {
        var len = results.rows.length;
        console.log("DEMO table: " + len + " rows found.");
        for (var i=0; i<len; i++){
            console.log("Row = " + i + " ID = " + results.rows.item(i).id + " Data =  " + results.rows.item(i).data);
        }
    }

    function errorCB(err) {
        console.log("Error processing SQL: "+err.code);
    }

    function successCB() {
        var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
        db.transaction(queryDB, errorCB);
    }

1 个答案:

答案 0 :(得分:2)

不,这里没有冲突。 'transaction'是'Database'对象的方法,它的参数如'query,errorCallback,successCallback'。

另一方面; 'executeSql'是'Transaction'对象的方法,它的参数就像 '查询,IDONTKNOW,successCallback,errorCallback'。

所以文档说的是事实,但我不明白为什么回调参数序列也不同。我认为不同的人设计了这些物品。