indexedDB中的升级事件处理程序错误导致版本更改事务中止
Version Change Transaction was aborted in upgradeneeded event handler error in indexedDB
我正在尝试使用IndexedDB创建两个对象存储,并将数据存储在其中。第一个对象存储是用数据创建的,但在创建第二个对象存储并存储数据后,处理程序在出现错误并检查evt.srcElement-->IDOpenDBRequest-->错误时转到:DOM错误,消息:"Version Change Transaction was aborted in upgraded event handler",名称:"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
我发现包装号不是唯一的。由于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 });
相关文章:
- JS编译器/包管理器,用于版本控制
- jQuery-2.1.1.min.js或最新版本jQuery-2.13.min.js不会't支持'@
- Chrome加载旧版本的Javascript文件
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 为什么jQuery 1.8不能在IE8和InternetExplorer9中使用?(截至2012年9月的IE9最新版本)
- 如何设置jsfiddle's的javascript版本
- 同一HTML页面中的两个不同版本的JQuery
- YouTube作为弹出窗口在桌面版本上播放,但不在移动设备上播放
- 有没有一种方法可以获得three.js的最小/lite版本
- Node和Nodejs版本不同
- 以ECMAScript 5及更高版本为目标时,八进制文字不可用
- 如何在HTML中指定Javascript的版本
- 贝宝赢了't将沙箱事务数据发送到IPN
- 注册组件的非角度和角度版本
- 浏览器是否持久缓存脚本元素的编译版本
- 如何确定相对较新版本的IE的高度和宽度(IE8不喜欢从JavaScript设置这种样式吗?
- 如何在IE8及以前版本中处理mousemove
- Netsuite Suitelet:在不达到治理限制的情况下,遍历事务行项目的列表加载和提交记录
- 从自身的一个版本中创建新的JavaScript对象
- indexedDB中的升级事件处理程序错误导致版本更改事务中止