【问题标题】:can't get the results of select query in an array with javascript无法使用 javascript 在数组中获取选择查询的结果
【发布时间】:2012-05-07 00:37:54
【问题描述】:

尝试使用 java script 将选择查询的结果存储到数组中时遇到问题。 问题是,在函数内部,数组包含正确的值,但在外部是空的,即使我使用了全局变量,它仍然是空的!!!

db.transaction(function (transaction) {
    var sql = "SELECT * FROM Question where idEnq=" + idEn;

    transaction.executeSql(sql, undefined, function (transaction, result) {
        var res = document.getElementById('results');
        res.innerHTML = "<ul>";
        if (result.rows.length) {
            for (var i = 0; i < result.rows.length; i++) {
                var row = result.rows.item(i);
                ch[i] = new qu(row.id, row.text, row.type);
                res.innerHTML += '<li>' + row.id + '&nbsp;' + ch[i].text + '&nbsp;' + ch[i].type + '</li>';
            }
            tablo = ch;
        } else {
            alert("No choices");
            res.innerHTML += "<li> No choices </li>";
        }

        res.innerHTML += "</ul>";
    }, onError);
}); // here the ch and the tablo array are empty

【问题讨论】:

  • 你真的需要开始正确缩进你的代码!!!
  • 不要将idEn直接放在查询文本中,这就是绑定变量(executeSql的第二个参数)的用途。

标签: javascript arrays sqlite


【解决方案1】:

您正在使用异步函数。任何想要使用这些函数“返回”的数据的东西都需要在回调中。当然,您可以分配此数据,例如到一个全局变量,但该变量只有在回调运行后(异步)才会有值。

【讨论】:

  • 对不起,我是 JS 新手,不知道如何使用回调!!
  • 移动当前在回调内部db.transaction(...)调用之后的代码,即res.innerHTML += "&lt;/ul&gt;";之后
  • 这段代码已经插入到返回数组的函数中,我是否必须添加回调参数如下: function GetQuest(idEn,callback) {...... .... ......返回tablo;}然后呢?
  • 我按照stackoverflow.com/questions/9933877/… 此处给出的答案进行操作,但出现错误提示“未捕获的 ReferenceError:未定义回调”,我该怎么办??
【解决方案2】:

你是新来的,所以看看这里http://pietschsoft.com/post/2008/02/JavaScript-Function-Tips-and-Tricks.aspx 有一部分讲的是异步调用 JavaScript 函数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 2021-05-15
    • 1970-01-01
    • 2017-02-04
    • 2013-12-07
    相关资源
    最近更新 更多