簡體   English   中英

我的全局變量在transcationSuccess回調中顯示為未定義-無法弄清原因

[英]My global variable comes up as undefined in transcationSuccess callback - can't figure out why

我正在與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函數...完成之前它是一個完整的字符串。 我想念什么?

這里有幾個問題。 首先是范圍問題。 您正在使用var關鍵字在函數范圍內創建一個新的returnHTML 刪除函數內部的var關鍵字,以便設置先前創建的returnHTML實例

這個:

var returnHTML = "<ul>";

應該:

returnHTML = "<ul>";

另外,看來您實際上並沒有從函數中返回returnHTML的值。 只需將return returnHTML添加到函數的末尾。

...
},
        onTransactError,
        onTransactSuccess);

    //Add this line
    return returnHTML;
}

在第一行,您將getPresentations的結果分配給returnHTML 但是您不會從此函數返回值,因此結果是undefined

因此,要么調用函數將結果設置為全局變量(即刪除賦值),要么從函數返回結果並對其進行賦值(即向函數添加return語句)。

我認為這條線也可能需要更改。

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

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

我認為在這種情況下雙引號和單引號將具有不同的含義。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM