我想使用javascript调用回调函数,正如您从http://docs.phonegap.com/en/3.0.0/cordova_storage_storage.md.html#database_size
的示例代码中看到的那样function queryDB(tx) {
tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);
}
function querySuccess(tx, results) {
console.log("Returned rows = " + results.rows.length);
// this will be true since it was a select statement and so rowsAffected was 0
if (!results.rowsAffected) {
console.log('No rows affected!');
return false;
}
// for an insert statement, this property will return the ID of the last inserted row
console.log("Last inserted row ID = " + results.insertId);
}
function errorCB(err) {
alert("Error processing SQL: "+err.code);
}
var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
db.transaction(queryDB, errorCB);
调用方法“queryDB”时没有任何参数,但该函数被定义为接收变量“tx”。来自PHP,我无法理解它是如何工作的,因为它确实如此。 还有querySuccess接收2个参数,也可以工作。
我的问题是我需要发送1个自己的参数,所以我修改了queryDB的调用,如下所示:
var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
db.transaction(queryDB(myParam), errorCB);
和
function queryDB(tx, myParam) {
tx.executeSql('SELECT * FROM' + myParam, [], querySuccess, errorCB);
}
但是不起作用。
1)怎么会收到未发送的params? 2)如何在不破坏它的情况下添加自己的参数?
答案 0 :(得分:0)
试试这个:
db.transaction(function() { queryDB(tx, myParam); }, errorCB);
function queryDB(tx, myParam) {
//logic here
}
事务函数正在寻找不包含参数的回调方法。你可以通过分配一个匿名函数来“劫持”这个函数,该函数用参数调用你想要的函数。
答案 1 :(得分:0)
写作时
db.transaction (queryDB, errorCB);
你作为参数传递了函数本身,但如果你试试这个:
db.transaction (queryDB(myParam), errorCB);
您将作为参数传递函数的结果,这将产生错误。
db.transacción
接收参数是2个函数,如果需要传递自定义参数,只需在声明中写入
function queryDB(tx, myParam) {
//Using your myParam
tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);
}
...
db.transaction(queryDB, errorCB);
请记住,javascript是一种解释性编程语言,不是面向对象的
答案 2 :(得分:0)
好的,所以我想我找到了答案。 从这里阅读http://theelitist.net/passing-additional-arguments-to-a-callback-function-in-javascript 我已经意识到Dawson Loudon的响应几乎已经完成,但是他错过了应该在第一个调用第二个函数的函数上传递的“tx”变量,即:
db.transaction(function(tx) { queryDB(tx, myParam); }, errorCB);
function queryDB(tx, myParam) {
//logic here
}
感谢您的时间和帮助。