Web SQL 数据库 + Javascript 循环

Posted

技术标签:

【中文标题】Web SQL 数据库 + Javascript 循环【英文标题】:Web SQL Database + Javascript loop 【发布时间】:2011-06-17 01:30:28 【问题描述】:

我正在尝试解决这个问题,但我自己似乎无法解决... 我正在使用 Web SQL 数据库,但无法让循环正常工作。 我使用:

for (var i=0; i<=numberofArticles-1; i++)  
    db.transaction(function (tx)   
    tx.executeSql('INSERT INTO LOGS (articleID) VALUES (?)',  [i]);
  );
 ;

而且我只得到 5.. 我没有得到增量 i 值。 谁能建议我做错了什么以及我应该考虑什么?

【问题讨论】:

【参考方案1】:

反过来做:

<script>
    numberofArticles = 5;
    db = openDatabase("websql", "0.1", "web-sql testing", 10000);
    db.transaction(function(tx) 
        tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, articleID int)');
    );
    db.transaction(function (tx)   
        for (var i=0; i<=numberofArticles-1; i++)  
            tx.executeSql('INSERT INTO LOGS (articleID) VALUES (?)',  [i]);
        ;
    );
</script>

另外,在这种情况下,外部循环的正确方法是不必要的

    for (var i=0; i<=numberofArticles-1; i++)  
      (function(i) 
        db.transaction(function (tx)   
                tx.executeSql('INSERT INTO LOGS (articleID) VALUES (?)',  [i]);
        );
      )(i);
    ;

【讨论】:

【参考方案2】:

看起来函数是异步的,当tx.executeSql 触发时,循环已经完成循环,i 已经更改了几次。

你可以用闭包解决这个问题。

for (var i=0; i<=numberofArticles-1; i++) 
    function (value)  
        db.transaction(function (tx)   
        tx.executeSql('INSERT INTO LOGS (articleID) VALUES (?)',  [value]);
      );
    (i); // <-- CALL the function
 ;

【讨论】:

@David Dorward 你能解释一下sintax(javascript不是websql)吗?尤其是“(i); // 您可以通过在函数末尾添加(any args) 来调用函数。 function ()() 就像 function foo() ; foo(); 一样,只是它没有保留 foo 以供以后使用。 (由于变量是特定函数调用的局部变量,因此每次在循环中调用新函数都会产生新的局部变量) 最后一件事,插入的参数不应该是“[value]”而不是“[i]”吗? 这是不正确的。函数的参数应该是 i,但插入的参数应该是 value - 编写的代码只是巧合

以上是关于Web SQL 数据库 + Javascript 循环的主要内容,如果未能解决你的问题,请参考以下文章

C#+JavaScript+SQL Server实现Web端在线考试系统 五:考试模块设计(附源码和资源)

是否有任何用于 Web SQL (javascript) 的 ORM 框架? [关闭]

使用 SQL 和 JavaScript 的用户首选项

温故而知新-Javascript使用Web存储

Java/Javascript -> 多个用户在同一个 sql-datasource 上工作,必须在前端保持一致

计算机二级考试 web程序设计考些啥??需要学习哪些编程语言???javascript是啥?跟java啥关系?