jQuery返回undefined与transaction.executeSql()

时间:2013-05-04 16:19:50

标签: javascript jquery jquery-mobile

我正在尝试使用来自web sql数据库的数据为jqm应用程序填充html标记。这是我的代码:

 $("#profile").on("pageinit", function () {
    db.transaction(function (transaction) {
        var sql = "CREATE TABLE IF NOT EXISTS profile " +
            " (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " +
            "nickname VARCHAR(100) NOT NULL," +
            "tankVol VARCHAR(100) NOT NULL," +
            "waterType VARCHAR(100) NOT NULL," +
            "category VARCHAR(100) NOT NULL)"
        transaction.executeSql(sql, undefined);

        var sqlNickname = "SELECT nickname FROM profile";
        transaction.executeSql(sqlNickname, undefined, function (transaction, result) {
            var ul = "<ul>";
            if (result.rows.length) {
                for (var i = 0; i < result.rows.length; i++) {
                    var row = result.rows.item;
                    var nickname = row.nickname;
                    ul += "<li>" + nickname + "</li>";
                    ul += "</ul>";

                }
            }
            var $profileNickname = $("#profile div:jqmData(role=content)");
            $profileNickname.html(ul);
            var $nicknameContent = $profileNickname.find("ul");
            $nicknameContent.listview();
        }, error);
    });
});

我使用的表总是只有一条记录,所以我不确定是否需要使用for循环遍历表。我认为问题在于:

transaction.executeSql (sqlNickname, undefined,

因为表正常工作并且html正在正确创建但在列表项元素中我得到字符串“undefined”而不是表的nickname列中的值。感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

首先,您正在关闭循环内的ur ul标记。如果结果集中有多个条目,您将获得一个开始标记的几个结束标记。将结束标记放在循环之外。

但你得到的错误是:

var row = result.rows.item;

将其更改为:

var row = result.rows.item(i);

因此程序知道从结果集中取出哪一行。即使只有一个结果,这也是必要的。