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 どんな助けでも大歓迎です!

ありがとう

4

2 に答える 2

1

Mac os x で chrome と safari を試してみましたが、エラーは見つかりませんでした。

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を使用しますが、それが理由だとは思いません。

于 2012-09-03T16:30:03.747 に答える
0

このようなエラーが非常に多く発生しています。この記事http://dev.opera.com/articles/introduction-to-indexeddb/だけがその理由を示しています----- " IndexedDB では、データベースでのすべての操作またはトランザクションは、コールバック関数."

これは私の簡単な例です。chrome の devtool->resource->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);");
        };

    });
于 2014-07-02T09:40:35.330 に答える