2

我正在使用 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 函数......它在完成之前是一个完整的字符串。我错过了什么?

4

3 回答 3

5

这里有几个问题。首先是范围问题。您正在使用关键字returnHTML在函数范围内创建一个新的。var删除var函数内部的关键字,以便设置先前创建的实例returnHTML

这:

var returnHTML = "<ul>";

应该:

returnHTML = "<ul>";

此外,您似乎实际上并没有returnHTML从您的函数返回值。只需添加return returnHTML到函数的末尾。

...
},
        onTransactError,
        onTransactSuccess);

    //Add this line
    return returnHTML;
}
于 2011-10-31T16:40:06.553 回答
0

在您的第一行,您将结果分配给getPresentationsto returnHTML。但是你没有从这个函数返回一个值,所以结果是undefined.

所以要么调用函数将结果设置到全局变量中(即移除赋值),要么从函数返回结果并赋值(即return在函数中添加语句)。

于 2011-10-31T16:43:14.590 回答
0

我认为这条线也可能需要改变。

returnHTML += "<li>" + results.rows.item(i).title + '</li>';

returnHTML += "<li>" + results.rows.item(i).title + "</li>";

我认为双引号和单引号在这种情况下会有不同的含义。

如果有什么要保持一致的话。

于 2011-10-31T16:46:36.363 回答