Jquery (Mobile) 和 phonegap 存储模块不同步
Posted
技术标签:
【中文标题】Jquery (Mobile) 和 phonegap 存储模块不同步【英文标题】:Jquery (Mobile) and phonegap storage module not synchronized 【发布时间】:2012-03-02 16:13:31 【问题描述】:我是 phonegap api 的新手,并且在存储部分和循环方面遇到了一些问题。循环将在第一次调用 executeSql 之前完成。
伪例子:
列表 = [1,2,3]; // 对于这个例子,id 1 有 3 个标签,id 2 有 6 个标签,id 3 有 9 个标签。
$.each(list, function(index,value) 警报(值); tx.executeSql('SELECT tag_name FROM Tag WHERE parent = '+value,[], function(tx, results) 警报(results.rows.length); , sql错误); );
期望的结果:1,3,2,6,3,9 结果:1,2,3,9,9,9
所以 javascript 在 tx 执行之前就完成了,查询将始终是“SELECT tag_name FROM Tag WHERE parent = 3
【问题讨论】:
【参考方案1】:executeSql 是一个异步方法,所以它会在你的 javascript 完成后返回:这就是为什么你总是首先得到“1,2,3”。
至于为什么你得到“9,9,9”而不是“3,6,9”,也许phonegap的实现是使用一个静态对象来表示“结果”,它会被最新的调用覆盖。
我建议您对每个 SELECT 执行单独的事务。检查documentation for transactions。
为了达到您想要的结果,我会执行以下操作:
$.each(list, function(index,value)
db.transaction(function(tx)
tx.executeSql('SELECT tag_name FROM Tag WHERE parent = ' + value,
[],
function(tx, results)
alert(value);
alert(results.rows.length);
,
sqlError
);
);
);
【讨论】:
以上是关于Jquery (Mobile) 和 phonegap 存储模块不同步的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jquery 或 jquery mobile mobile 根据日期列出数据
jQuery Mobile-jquery Mobile 怎么用ajax提交表单
jQuery Mobile仿360首页,jQuery Mobile网格布局,jQuery Mobile网址大全,HTML5仿360首页