我的全局变量在transcationSuccess回调中未定义 - 无法弄清楚原因

时间:2011-10-31 16:37:56

标签: javascript extjs webdb

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

3 个答案:

答案 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>";

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

如果有什么东西可以使它保持一致。