将数据从异步请求添加到 WebSQL 数据库时出错
Error when adding data from an asynchronous request to a WebSQL database
我正在使用使用设备日历的Phonegap/Cordova为Android构建应用程序。我写了一个插件("Calify"),可以将事件添加到设备日历中,效果很好。但是,我正在尝试将插件返回的设备日历事件 ID 添加到 Web-SQL 数据库中的记录中,但这给了我以下错误(在 Android 模拟器中运行):
file:///android_asset/www/cordova-2.2.0.js: Line 1090 : processMessage failed: Message: S01 Calify507282772 s[{"id":191,"calid":615}]
file:///android_asset/www/cordova-2.2.0.js: Line 1091 : processMessage failed: Error: Error: INVALID_STATE_ERR: DOM Exception 11
这是我的代码的样子。
window.addEvent(function(insertions){
data = JSON.parse(insertions);
console.log(insertions);
event_id = data[0]['calid'];
id = data[0]['id'];
tx.executeSql('UPDATE AFSPRAKEN SET eventID=? WHERE id=' + id, [event_id]);
}, [calendarID, [{start: start.getTime(), end: end.getTime(), title: event_title}]]);
"插入"日志为我提供了所需的结果,以及分别记录"event_id"和"id"。它似乎与数据库插入有关(这也是异步的)。请注意,此函数在数据库事务中运行,这是必需的,因为我在此日历事件函数之外也运行其他一些查询。注释掉插入查询可使代码运行时没有错误。
DOM 异常 11 似乎意味着对象(我猜是"插入"?)不再可访问,也许与此有关。
我认为我犯的错误现在很明显,所以对于通过谷歌找到这个问题的每个人(错误消息并没有真正指向正确的方向),这就是我的代码给出错误的原因:
数据库事务是异步的,以及 Phonegap 插件。Phonegap 函数在数据库事务外部完成,因此无法在该事务内运行数据库查询。这可以通过多种方式解决:
- 在Phonegap通信的完整功能中打开新的数据库事务
- 像我一样,在数据库事务后连接Phonegap插件
相关文章:
- HTML 5 帮助.使用websql数据库中的动态javascript渲染选项
- 为什么除了数据库(WebSQL)之外,其他数据库名称在android中不起作用
- js-worker和phonegap上的websql数据库
- 将数据库存储/备份到一个文件中,IndexeDB、WebSQL和SQLlite的区别
- 将javascript值插入websql数据库
- websql phonegap应用程序:数据库升级
- 创建 WebSQL 数据库,然后删除自身
- Chrome 扩展 WebSQL - 需要背景和内容页面才能访问相同的数据库,但它们不需要
- 将WebSQL数据库复制到其他位置
- 离子收集重复 - 未命中由websql数据库填充
- 将数据从异步请求添加到 WebSQL 数据库时出错
- 防止 WebSQL 数据库中的 SQL 注入?(如何处理数据中的报价?
- 优化WebSQL本地数据库填充
- 使用javaScript从WebSQL数据库返回多行作为数组
- 从web工作程序和主浏览器线程访问相同的websql数据库
- WebSQL | SQLite -插入"?字符输入数据库
- 从websql数据库中获取现有表
- 数据库选择所有在服务中的angular websql,获取数组
- 将JSON数据插入Sqlite/webSQL数据库
- 如何将WebSQL数据库导出为.sql文件?(如,mysqldump)