尝试创建事务时出现DOM IDBDatabase异常11

DOM IDBDatabase Exception 11 when trying to create a transaction

本文关键字:DOM IDBDatabase 异常 创建 事务      更新时间:2023-09-26

我使用的是最新的谷歌chrome。。我正在尝试实现HTML5索引数据库示例。AIM是在页面加载并存储数据时创建数据库。如果有任何示例,请发布任何示例。我尝试过这个代码,但当我尝试创建事务时,得到了Uncaught Error: InvalidStateError: DOM IDBDatabase Exception 11。这是代码片段。。

var idbRequest;
    var idb;
$(document).ready(function(){
    //ini----------------------
     var peopleData = [
                       { name: "John Dow", email: "john@company.com" },
                       { name: "Don Dow", email: "don@company.com" }
                   ];
    window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB;
    window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange;
    window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction;
    //create database.............
    if (window.indexedDB) {
          idbRequest = window.indexedDB.open("StoreDB");
          idbRequest.onsuccess =  function(e) {
              idb = idbRequest.result || e.result;  // FF4 requires e.result. IDBRequest.request isn't set :(
          /*idbRequest.onerror = function (evt) {
                  console.log("IndexedDB error: " + evt.target.errorCode);
              };*/
              var v = '2.0';
                var setVrequest = idb.setVersion(v);
                setVrequest.onsuccess = function(e) {
                    if(idb.objectStoreNames.contains("Stores")) {
                        alert("ObjectStore is already created.");
                        return false;
                      }
                    var objectstore = idb.createObjectStore("Stores");
                    alert("Object store Created.");
                    if (!idb.objectStoreNames.contains('Stores')) {
                          alert("Object store doesn't exist.");
                        return;
                      }else{
                          alert("Object store contain 'store'");
                      }
                       // Create a transaction that locks the world.
                     var trans = idb.transaction(["Stores"],"readwrite");//getting exception on this line..
                     trans.oncomplete = function(){
                          console.log("Success transaction");
                        };
                        var objectStore = trans.objectStore("Stores");
                      var request = objectStore.put(
                          1,
                          "wsdsdsd");
                    alert("data added");
                };



            };

    }   
});

已解决。。我遇到错误,因为在版本更改过程中无法创建事务。。这是最后一个可行的答案。。

var idbRequest;
    var idb;
$(document).ready(function(){
    //ini----------------------
    window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB;
    window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange;
    window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction;
    //create database.............
    if (window.indexedDB) {
          idbRequest = window.indexedDB.open("DB");
          idbRequest.onsuccess =  function(e) {
              idb = idbRequest.result || e.result;  // FF4 requires e.result. IDBRequest.request isn't set :(
          /*idbRequest.onerror = function (evt) {
                  console.log("IndexedDB error: " + evt.target.errorCode);
              };*/
              var v = '2.0';
                var setVrequest = idb.setVersion(v);
                setVrequest.onsuccess = function(e) {
                    if(idb.objectStoreNames.contains("Stores")) {
                        alert("ObjectStore is already created.");
                        var vertrans = setVrequest.result;
                        vertrans.oncomplete = doStuff;
                        return false;
                      }
                    var objectstore = idb.createObjectStore("Stores");
                    alert("Object store Created.");
                    if (!idb.objectStoreNames.contains('Stores')) {
                          alert("Object stores doesn't exist.");
                        return;
                      }else{
                          alert("Object store contain 'stores'");
                      } 
                    var vertrans = setVrequest.result;
                    vertrans.oncomplete = doStuff;
                };
            };

    }   
});
function doStuff(){
       // Create a transaction that locks the world.
    var trans = '';
         trans = idb.transaction(['Stores'],'readwrite');
     var objectStore = trans.objectStore('Stores');
      var request = objectStore.put(
          1,
          "wsdsdsd");
    alert("data added");
     trans.oncomplete = function(){
          console.log("Success transaction");
        };
}

您可以在我的网站上找到一个有效的indexeddb示例。我正在使用一个为indexeddb API编写的名为linq2indexeddb的库。尝试一下,它将为您节省大量精力,使您的代码与跨浏览器兼容。