Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “错误”;试图对不允许突变的数据库执行突变操作。”;在indexedDB中检索数据时_Javascript_Indexeddb - Fatal编程技术网

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

Javascript “错误”;试图对不允许突变的数据库执行突变操作。”;在indexedDB中检索数据时,javascript,indexeddb,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.");

我有一个简单的示例代码:

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');
    };
  };
};
我明白了:

试图对不允许突变的数据库执行突变操作。“代码:”6

在线

var objectStore = transaction.objectStore('customers');

不明白-我做错了什么?

我没有尝试过该代码,但从您不应该将空列表作为第一个参数传递给
db.transaction()
-它应该是
db.transaction([“customers”],…)
,因为您想使用该对象存储。

我想我找到了答案。我不应该访问oncomplete中的objectStore。我只需要在做了新的交易后再做。正确的方法是:

var transaction = db.transaction([],  IDBTransaction.READ_WRITE, 2000);
    transaction.oncomplete = function(){
      console.log("Success transaction");
    };
var objectStore = transaction.objectStore('customers');

顺便说一句,Mozilla的MDN就是这样显示的

只能在versionchange事务中创建或删除对象存储


请参阅:

谢谢,但它不起作用。为了简单起见,我把它去掉了。所以范围内的“客户”不会改变任何东西。无论如何,我认为空数组是可以的:“如果这个参数是未指定的、空的或null,那么事务的作用域就是整个连接的数据库。”这个问题与关于
onsuccess
oncomplete