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 框架? [关闭]