使用高于现有版本的版本打开indexeddb时出错

时间:2014-03-21 12:48:33

标签: javascript

var database = e.target.result;
var version =  Number(database.version);
console.log("in onsuccess>>>>>>>>>>>>>>>>>>>>>>>>>> : "+dbName);
console.log(e);     
database.close();
var secondRequest = indexedDB.open(dbName, (version+1));
console.log(secondRequest); // <-- error on this line

//console.log(secondRequest.result);
secondRequest.onupgradeneeded = function (e) {
    console.log("in onupgradeneeded>>>>>>>>>>>>>>>>>>>>>>>>>>");
    console.log(e);     
    var database = e.target.result;
    //database.setVersion(12);
    var objectStore = database.createObjectStore(storeName, {
        keyPath: 'id'
    });
};
secondRequest.onsuccess = function (e) {
    console.log("000000000000000000000000000000");
    e.target.result.close();
};

secondRequest.onerror = function(e){
    console.log("Error ------------------- ");
    console.log(e);
}

在上面的控制台中我在

中遇到以下错误
console.log(secondRequest);

错误:

IDBOpenDBRequest
error   :  [Exception: DOMException]

我添加了listner

IDBOpenDBRequest.onerror = function(e){
}

但它不会去那里。如果有人有解决方案,请帮助我。

1 个答案:

答案 0 :(得分:1)

虽然你有一些核心概念,但你的代码很难按原样遵循。首先,此e事件分配未定义:

var database = e.target.result; 

数据库open()在哪里? dbName来自哪里?

提供更多失败的代码,最好通过jsfiddle,我们会帮助您找到解决方案。

更新:Here's a working example您正在尝试做的事情。

输出 div

<div id="idb_version"></div>

<强>代码

var db_name = 'myname',
    database_open_request = window.indexedDB.open(db_name);
database_open_request.addEventListener('success', function (e) {
    database = e.target.result;
    database.close();
    var second_database_open_request = window.indexedDB.open(db_name, database.version + 1);
    second_database_open_request.addEventListener('upgradeneeded', function (e) {
        database = e.target.result;
        database.close();
        window.document.getElementById("idb_version").innerHTML = database.version;
    });
});

如果未指定版本参数,则会在success回调中获得对最新版本的引用。然后我听一个versionchange并将版本增加一个。反复运行,您将逐个看到版本增加。