我坚持使用以下内容,我确信这是因为我缺乏处理回调的经验,我想按如下方式查询数据库:
db.transaction(queryFoodDBAll, errorCB);
function errorCB(tx, err) {
alert("Error processing SQL: "+err);
}
function queryFoodDBAll(tx) {
tx.executeSql('SELECT * FROM Food', [], displayAllFood, errorCB);
}
function displayAllFood(tx, results) {
var len = results.rows.length;
var items = new Array();
for (var i=0; i<len; i++){
items[i] = results.rows.item(i).data
}
printdata('settings-food',items, 'Food');
}
function printData(type,data,title) {
switch(type)
{
case 'settings-food':
alert("Data: "+data);
var content = '<div data-role="collapsible" data-theme="c"><h3>'+title+'</h3>';
for (var i=0;i<data.length;i++) {
content += '<p>'+data[i]+'</p>';
}
content += '</div>';
$("#settings-food").append(content);
break;
}
现在,当我运行它时,所有信息都被成功检索,直到我运行printData函数,这给了我errorCB显示“Error processing SQL:undefined”。
有关于此的任何想法吗?
答案 0 :(得分:2)
您的问题是返回堆栈:
当你进入printData时,你的调用堆栈如下所示:
----queryFoodDAll
----executeSQL
----disiplayAllFood (jump to printData)
----errorCB
----printData
Javascript将返回该调用堆栈;所以当你在途中跳过errorCB
时,无论你做什么,在回来的路上它都能击中这个功能;因为它是回调堆栈的一部分。
您要做的是没有errorCB
作为回叫功能。
而是检查displayAllFood()
中的有效SQL。如果其有效继续向下调用列表(意味着继续到printData
),但如果其不有效,则调用errorCB
。