错误"试图在不允许突变的数据库上进行突变操作."在indexedDB中检索数据时
Error "A mutation operation was attempted on a database that did not allow mutations." when retrieving data in indexedDB
我有这个简单的示例代码:
var request = mozIndexedDB.open('MyTestDatabase');
request.onsuccess = function(event){
var db = event.target.result;
var request = db.setVersion('1.0');
request.onsuccess = function(event){
console.log("Success version.");
if(!db.objectStoreNames.contains('customers')){
console.log("Creating objectStore");
db.createObjectStore('customers', {keyPath: 'ssn'});
}
var transaction = db.transaction([], IDBTransaction.READ_WRITE, 2000);
transaction.oncomplete = function(){
console.log("Success transaction");
var objectStore = transaction.objectStore('customers');
};
};
};
我得到这个:
行试图在不允许修改的数据库上执行修改操作。" code: "6
var objectStore = transaction.objectStore('customers');
想不出来-我做错了什么?
只能在版本变更事务中创建或删除对象存储
见:https://developer.mozilla.org/en-US/docs/IndexedDB/IDBDatabase
我想我找到答案了。我不应该在oncomplete中访问objectStore。我只需要在做了新的交易后再做。正确的方法是:
var transaction = db.transaction([], IDBTransaction.READ_WRITE, 2000);
transaction.oncomplete = function(){
console.log("Success transaction");
};
var objectStore = transaction.objectStore('customers');
顺便说一句,这就是Mozilla的MDN所显示的。https://developer.mozilla.org/en/IndexedDB/Using_IndexedDB section_10
我没有尝试该代码,但根据文档判断,您不应该将空列表作为第一个参数传递给db.transaction()
-它应该是db.transaction(["customers"], ...)
,因为您想使用该对象存储
相关文章:
- 铬:“;未捕获的语法错误:意外的标记:"
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 使用“+="操作人员
- //而不是在src=“”上使用http://"属性
- "未捕获的语法错误:意外的标记}"
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- "实例范围”;TypeScript类的getter/setter
- Javascript复选框函数:;缺少:在属性id之后"
- "“;变量未引用正确的对象
- "日期“;AJAX请求返回的类型值未定义
- 得到"TypeError:无法读取属性'filename'未定义的“;调用“npm start
- Soundcloud api"未捕获的类型错误:无法读取属性'uri'“未定义”;
- "工具提示"jQuery插件坏了
- "锻造;React中的表达式
- 图像可以从源<img src=""/>.TEXT可以在没有javascript的情况下从外部
- 如何提取“;href"最近列表项中的属性值
- CKEditor如何允许href="javascript:void(0)"在小部件中
- 插入“;img src"在javascript中