我已经花了一整天,但我就是不明白什么在我的PhoneGap aplication发生。
在使用PhoneGap的从本地存储我的应用程序即时通讯,存储从网页检索到的新闻消息。我这样做是因为我希望用户能够脱机观看内容。
当他们上线的应用程序将简单地发送其最后一次更新日期的网站,该网站将只发送更改的记录背部和应用程序并将其存储在本地数据库一次。
这一切都加载数据的时候第一次作品不错,exept。
问题
当我开始了第一次的应用程序,它需要与网站上提供的所有记录填充数据库。 (201行)但是,当我尝试加载多于39条消息时,它将创建一个未定义的sql错误。
不过,我可以改变PHP脚本,因此将只派39分的结果。第一次加载应用程序后,我可以再次更改脚本,以便它将发送所有记录,并且它将完美无瑕。
为了使问题更加复杂,我的应用程序的每一次启动所有表都删除和重建(当然这仅仅是为发展宗旨,和下降将不会包含在最终版本)。重新启动应用后,它将加载201条记录,没有任何问题。
再次重现的问题,我必须完全卸载该应用程序,然后重新安装。
代码
代码存储结果:在启动时
var q = 'INSERT OR REPLACE INTO NIEUWS (id, title, introtext, catid) VALUES (?, ?, ?, ?)';
var len = contents.length;
for (var i=0; i<len; i++){
tx.executeSql(q, [contents[i].id, contents[i].title, contents[i].introtext, contents[i].catid]);
}
代码:
tx.executeSql('DROP TABLE IF EXISTS NIEUWS');
tx.executeSql('CREATE TABLE IF NOT EXISTS NIEUWS (id PRIMARY KEY, title TEXT, introtext TEXT, catid INTEGER)');
我真的希望这个问题是有道理的一些你,因为我现在完全失去了。
在此先感谢!
编辑1 只试图只保存ID和标题,这工作没有任何问题。
var q = 'INSERT OR REPLACE INTO NIEUWS (id, title) VALUES (?, ?)';
var len = contents.length;
for (var i=0; i<len; i++){
tx.executeSql(q, [contents[i].id, contents[i].title]);
}
编辑2 改写代码,以等待回调,同样的错误仍然存在。
function HandleNewsQuery(tx){
var q = 'INSERT OR REPLACE INTO NIEUWS (id, title, introtext, catid) VALUES (?, ?, ?, ?)';
if(c < contents.length){
tx.executeSql(q, [contents[c].id, contents[c].title, contents[c].introtext, contents[c].catid], HandleNewsQuery, errorCB);
c++;
}
}
可能相关:http://stackoverflow.com/questions/4825455/web-sql-database-javascript-loop – pawel 2013-04-09 14:09:15