我正在使用Sencha touch,我试图在从webdb获取数据后更新面板...不会认为这会很难但我在这里完全遗漏了一些东西......
var returnHTML = getPresentations();
function getPresentations() {
returnHTML = "<ul>";
db = openDatabase("myDB", "", "TheDB", 500000);
db.transaction(
function (tx) {
tx.executeSql("SELECT title FROM Presentations",
[],
function (transaction, results) {
var returnHTML = "<ul>";
for (var i = 0; i < results.rows.length; i++) {
returnHTML += "<li>" + results.rows.item(i).title + '</li>';
}
returnHTML += "</ul>";
},
onError);
},
onTransactError,
onTransactSuccess);
}
function onTransactSuccess() {
alert(returnHTML);
console.log(returnHTML);
extPanel.update();
}
但是returnHTML
不断变回未定义......不确定这里发生了什么。
我看着它通过我的SELECT函数......它在完成之前是一个完整的字符串。我错过了什么?
答案 0 :(得分:5)
这里有几个问题。第一个是范围问题。您正在使用returnHTML
关键字在函数范围内创建新的var
。删除函数内的var
关键字,以便设置以前创建的returnHTML
实例
:此:强>
var returnHTML = "<ul>";
应该是:
returnHTML = "<ul>";
此外,您实际上并未从函数中返回returnHTML
的值。只需将return returnHTML
添加到您的函数末尾即可。
...
},
onTransactError,
onTransactSuccess);
//Add this line
return returnHTML;
}
答案 1 :(得分:0)
在第一行,您将getPresentations
的结果分配给returnHTML
。但是您没有从此函数返回值,因此结果为undefined
。
因此要么调用函数将结果设置为全局变量(即删除赋值),要么从函数返回结果并赋值(即向函数添加return
语句)。
答案 2 :(得分:0)
我认为这条线也可能需要改变。
returnHTML += "<li>" + results.rows.item(i).title + '</li>';
要
returnHTML += "<li>" + results.rows.item(i).title + "</li>";
我认为双引号和单引号在这种情况下会有不同的含义。
如果有什么东西可以使它保持一致。