2012-08-29 19 views
1
console.log(db); //db object exists 
console.log(db.objectStoreNames.contains('test')); //true - object store exists 

var transaction = db.transaction(['test'], 'readwrite'); // this line is causing the error 

A mutation operation was attempted on a database that did not allow mutations." code: "6 

为什么我得到这个错误?我的数据库和对象存储?我在想我! :D任何帮助非常感谢!IndexedDB错误:尝试在不允许突变的数据库上进行突变操作

谢谢

+0

您使用的浏览器是?另外,我知道这并不是IndexedDB的世界上最简单的事情,但如果您可以发布一个表现此问题的自包含测试用例,那么您将有更好的机会得到一个好的答案。 – dumbmatter

回答

1

我只是现在尝试在铬,Safari浏览器在Mac OS X上,并没有发现任何错误。

我一样遵循http://dev.yathit.com/ydn-db/using/schema.html(页面加载ydn.db.Storage对象)

schema = {stores: [{name: 'test'}]} 
st = new ydn.db.Storage('test1', schema) 
// ... wait for async 
db = st.db() 
db.transaction(['test'], 'readwrite') 

老铬使用1而不是“读写”,但我不认为它的理由。

+0

谢谢,但我发现错误:我没有等我的对象存储创建之前,我没有交易。 – Johan

0

有这么多这样的错误incurred.Only本文http://dev.opera.com/articles/introduction-to-indexeddb/说明了为什么----- “随着IndexedDB的,在我们的数据库中的所有操作或交易必须在一个回调函数内发生。”

这个是我简单的例子,请通过检查Chrome的devtool->资源 - > IndexedDB的;(如果没有在IndexedDB的尝试刷新浏览器)

HTML部分:

<form id="form1"> 
    <label for="task">What do you need to do?</label> 
    <input type="text" name="task" id="task" value="" required> 
    <button type="submit" id="submit">Save entry</button> 
</form> 

的脚本部分:

var idb = indexedDB.open('niangzi10', 2); 
    var dbobject; // Define a global variable to hold our database object 
    idb.onsuccess = function (evt) { 
     console.log("success"); 
     if (dbobject === undefined) { 
      dbobject = evt.target.result; 
     } 
    } 
    idb.onupgradeneeded = function (evt) { 
     dbobject = evt.target.result; 
     if (evt.oldVersion < 1) { 
      dbobject.createObjectStore('tasks', { autoIncrement: true }); 
     } 
    } 
    //transaction operation in callback function 
    var form1 = document.getElementById('form1'); 
    form1.addEventListener('submit', function (evt) { 
     'use strict'; 
     evt.preventDefault(); 

     var entry = {}, transaction, objectstore, request; 
     entry = { name: document.querySelector("#task").value }; 

     // Open a transaction for writing 
     transaction = dbobject.transaction(['tasks'], 'readwrite'); 
     objectstore = transaction.objectStore('tasks'); 
     // Save the entry object 
     request = objectstore.add(entry); 
     transaction.oncomplete = function (evt) { 
      alert("'" + document.querySelector("#task").value + "'has been insert into indexedDB;please check it using chrome's devtool->resource->indexedDB(if nothing,refresh browser);"); 
     }; 

    }); 
相关问题