[英]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.