【问题标题】:Version Change Transaction was aborted in upgradeneeded event handler error in indexedDB版本更改事务在 indexedDB 中的 upgradeneeded 事件处理程序错误中中止
【发布时间】:2014-10-09 16:30:25
【问题描述】:

我正在尝试使用 IndexedDB 创建两个对象存储并将数据存储在其中。第一个对象存储是使用数据创建的,但是在创建第二个对象存储并存储数据之后,处理程序会出错并检查 evt.srcElement --> IDBOpenDBRequest--> 错误:DOM 错误,消息:“版本更改事务在 upgradeneeded 事件处理程序中被中止”和名称:“ABortError”

    var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB ||     window.msIndexedDB;
var IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction;
var db;
 var request = indexedDB.open("xxMobileDB", 1);  
         request.onsuccess = function (evt) {
             db = request.result;
             var version = parseInt(db.version);
             db.close();
             var request1 = indexedDB.open("xxMobileDB", version + 1);
             request1.onupgradeneeded = function (evt)
             {

                 var objectBOMStore = evt.currentTarget.result.createObjectStore(
                         "BOM", { keyPath: "PackNumber", autoIncrement: true });

                 objectBOMStore.createIndex("PackNumber", "PackNumber", { unique: false });

                 for (var i = 0; i < BOMData.length; i++)
                 {
                     var obj = BOMData[i];
                     objectBOMStore.add(obj);
                 }

             };
             request1.onsuccess = function (evt)
             {
                 evt.target.result.close();
             };
             request1.onerror = function (evt) {
                 console.log("IndexedDB error: " + evt.target.errorCode);
             };

         };

         request.onerror = function (evt) {
             console.log("IndexedDB error: " + evt.target.errorCode);
         };

         request.onupgradeneeded = function (evt)
         {
             var objectStore = evt.currentTarget.result.createObjectStore(
                      "Pack", { keyPath: "PackId", autoIncrement: true });

             objectStore.createIndex("PackId", "PackId", { unique: true });

             for (var i = 0; i < packData.length; i++)
             {
                 var obj = packData[i];
                 objectStore.add(obj);
             }


         };

填充 objectBOMStore 后,代码输入 request1.error 。对象存储包的创建没有任何错误,我可以在 Chrome-->Resources--> IndexedDB 中看到它们

【问题讨论】:

    标签: javascript indexeddb


    【解决方案1】:

    我认为包装编号不是唯一的。由于我将 KeyPath 设置为 PackNumber,因此 PackNumber 值必须是唯一的。我使用了另一个独特的专栏,解决了这个问题。

         var objectBOMStore = evt.currentTarget.result.createObjectStore(
                         "BOM", { keyPath: "PackNumber", autoIncrement: true });
    

    我使用了唯一编号的 BOMID。

         var objectBOMStore = evt.currentTarget.result.createObjectStore(
                         "BOM", { keyPath: "BOMID", autoIncrement: true });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 2020-07-17
      • 2012-07-22
      • 2017-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多