2013-12-11 59 views
1

我正在构建一个Phone Gap应用程序,并使用db_transaction函数,下面的例子在这个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

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

另一方面, 'executeSql'是'Transaction'对象的方法,它的参数如 'query,IDONTKNOW,successCallback,errorCallback'。

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

+1

仅供参考 - 事务的第二个参数是查询参数(使用参数化查询时) – ganders

相关问题