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 和 ASP.NET 组合问题

jQuery-mobile 和 ASP.NET 组合问题

jQuery Mobile-jquery Mobile 怎么用ajax提交表单

jQuery Mobile仿360首页,jQuery Mobile网格布局,jQuery Mobile网址大全,HTML5仿360首页

jquery mobile 怎么安装