我有这个简单的示例代码:
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');
无法弄清楚 - 我做错了什么?
答案 0 :(得分:3)
我想我找到了答案。我不应该在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
答案 1 :(得分:3)
您只能在版本更改事务
中创建或删除对象库请参阅:https://developer.mozilla.org/en-US/docs/IndexedDB/IDBDatabase
答案 2 :(得分:0)
我没有尝试该代码,但按the documentation判断您不应将空列表作为第一个参数传递给db.transaction()
- 它应该是db.transaction(["customers"], ...)
,因为您想要工作与该对象存储区。