我正在尝试在 javascript 中使用 SQLite 和 jQuery 来建立一个 html 列表,但我认为我在这里有点超出我的深度......
我的 html 页面中有一个 div,我试图用 ul 标记填充它,然后是通过读取 DB 条目生成的 li 标记。问题似乎是在数据库读取返回结果之前生成了页面。
这就是我所拥有的。在 HTML 页面索引上:
<div id="divBody"></div>
我有一个 javascript 文件链接如下:
<script src="js/jquery-1.js" type="text/javascript"></script>
<script src="js/Common.js" type="text/javascript"></script>
在 Common.js 的顶部,我有以下内容:
var db = openDatabase("Favourites", "1.0", "Favourites", 200000);
var selectStatement = "SELECT * FROM Favourites ORDER BY id";
var dataset;
var favList = "Test";
/*Page Start*/
$(document).ready(function () {
favList = showRecords();
$("#frmSystemInfo").submit(function () {
var data = buildList();
$("#divBody").html(data);
return false;
});
$("#frmSystemInfo").submit();
});
这两个函数如下:
function buildList() {
var appsHTML += "<ul id='favouritelist'>";
alert('favList: '+favList);
if (favList == '') {
appsHTML += "<!-- Empty List -->";
} else {
appsHTML += favList;
}
appsHTML += "</ul>";
}
那么,读取DB的函数如下:
function showRecords()
{
var favItems = "";
db.transaction(function (tx) {
tx.executeSql(selectStatement, [], function (tx, result) {
dataset = result.rows;
for (var i = 0, item = null; i < dataset.length; i++) {
item = dataset.item(i);
favItems += "<li role='" + item['uri'] + "' id='" + item['id'] + "'> <img src='" + item['img'] + "' alt='" + item['name'] + "'> <div class='fav-title'> " + item['name'] + " </div> </li>";
alert('favItems: '+favItems);
}
favList = favItems;
alert(favList : '+favList );
});
});
}
问题在于函数 buildList 中的变量 favList 返回为未定义。加载页面时,会显示来自 showRecords 的警报,但在那个阶段为时已晚。
为什么 showRecords() 是在 buildList() 之后执行的,即使它是先调用的?
抱歉,如果这是一个非常基本的问题,对这些东西不是很敏锐。我从另一个示例中复制了很多这样的东西,它有一个 $(document).ready 函数,在显示页面之前似乎可以读取数据库。
我在这里做错了什么吗?
干杯,麦克奎姆