首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NotFoundError:在indexedDB中创建事务时DOM IDBDatabase异常8

NotFoundError:在indexedDB中创建事务时DOM IDBDatabase异常8
EN

Stack Overflow用户
提问于 2013-07-15 18:34:52
回答 1查看 4.5K关注 0票数 1

我尝试在一些测试中使用索引DB。

我的代码如下:

代码语言:javascript
复制
<html>
<head>
    <script type="text/javascript">

        var db = null;
        const dbName = "contactsDB";
        const dbVersion = 1;
        const storeName = "contacts";

        const contacts = [
            {id : 1, firstname : 'F1', lastname : 'L1'},
            {id : 2, firstname : 'F2', lastname : 'L2'}
        ];

        function init() {
            window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
            openDB();
        }

        function openDB() {
            var request = window.indexedDB.open(dbName, dbVersion);

            request.onerror = function (e) {
                alert('DB connexion error : ' + e.target.errorCode);
            };

            request.onsuccess = function (e) {
                alert('DB connexion success');
                // get db instance
                db = e.target.result;
            };

            // seulement implemente sur les browsers recents
            request.onupgradeneeded = function (e) {
                // updgrade DB
                var db = e.target.result;

                if (db.version != dbVersion) {              
                    // create object store
                    var objectStore = db.createObjectStore(storeName, {keyPath : "id"});

                    // create index to search contacts by lastname.
                    // Duplicates possible ==> so no unique index
                    objectStore.createIndex("lastname", "lastname", {unique : false});
                }
            };
        }

        function addToDB() {
            // get object store in tx
            var objectStore = getObjectStore(storeName, "readwrite");

            // stores values
            for (var c in contacts) {
                var request = objectStore.add(contacts[c]);
                request.onsuccess = function (e) {
                    alert('Add success for ' + e.target.result);
                }
            }

        }

        function getObjectStore(store_name, mode) {
            var tx = db.transaction(store_name, mode);
            return tx.objectStore(store_name);
        }

    </script>
</head>
<body onload="init();">
    <input type="button" onclick="addToDB();" value="Add" />
</body>
</html>

我有一个web服务器来使用带有本地主机域的页面。

当我用Firefox 22.0加载页面时,DB open成功了。但是,当我单击Add按钮并调用addToDB函数时,我在Firefox中有以下错误:

NotFoundError:由于找不到请求的数据库对象,操作失败。例如,对象存储不存在,而是正在打开。 var tx = db.transaction(store_name,mode);

我在Chrome 24上也做了同样的测试。当我单击Add按钮时,错误来自var tx = db.transaction(store_name,mode)一行;在console上,我有以下错误:

未知错误: NotFoundError: DOM IDBDatabase异常8

通过搜索有关该异常的更多信息,我找到了以下链接:

https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabaseException?redirectlocale=en-US&redirectslug=IndexedDB%2FIDBDatabaseException

在该链接中,它被标记为异常8:请求被中止,例如,通过对IDBTransaction.abort的调用。

所以,我的问题--我不知道为什么我的请求在那个时候被中止了。

有人想办法解决这个问题吗?

谢谢。

西尔万

EN

回答 1

Stack Overflow用户

发布于 2013-07-16 01:20:15

由于if (db.version != dbVersion)检查,您的对象存储没有被创建。那个街区永远不会被进入。只要移除支票,更改为const dbVersion = 2;,一切都会好起来的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17661373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档