0

我正在尝试在 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 函数,在显示页面之前似乎可以读取数据库。

我在这里做错了什么吗?

干杯,麦克奎姆

4

1 回答 1

0

通过使用 setTimeout 命令在返回结果之前延迟代码移动来解决。

然而,我走了一条不同的路线,afried 向我展示了如何调用我能够在服务器上指定数据库位置的 jim 脚本。这也有它的问题lol..

于 2013-11-15T12:51:58.397 回答