错误“尝试对不允许突变的数据库进行突变操作。”在indexedDB中检索数据时

时间:2011-09-04 17:50:14

标签: javascript 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');

无法弄清楚 - 我做错了什么?

3 个答案:

答案 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"], ...),因为您想要工作与该对象存储区。