javascript - IndexedDB 打开数据库请求奇怪的行为

标签 javascript indexeddb

我有一个使用indexedDB的应用程序(调查问卷)。 我们有一个数据库,里面有几个商店。

商店中已经存储了数据。

在某个时刻,仪表板 html 文件会被加载。在这个文件中,我调用了几个函数:

function init(){
            adjustUsedScreenHeight();
            db_init();
            setInstitutionInstRow();
            loadRecommendations();
            loadResultsFromDB();
            fillEvaluations();
            document.addEventListener("deviceready", onDeviceReady, function(e) {console.log(e);}); 
        }

init() 函数在 body onLoad 上调用。

setInstitutionInstRow() 看起来像这样:

 function setInstitutionInstRow(localId){
//localId = 10;
if (localId == undefined){
    console.log("Localid underfined: ");
    //open db, open objectstore;
    var request = indexedDB.open("kcapp_db", "1.0");

    request.onsuccess = function() {
        var db = request.result;    
        var tx = db.transaction ("LOCALINSTITUTIONS", "readonly");
        var store = tx.objectStore("LOCALINSTITUTIONS");

        tx.oncomplete = function(){
            db.close();
        }
        tx.onerror = function(){
            console.log("Transaction error on setInstInstRow");
        }

        var cursor = store.openCursor();
        cursor.onsuccess= function () {
            var match = cursor.result;
            console.log ("Retrieved item: " + match.value.instid);
            //  alert("Added new data");
            if (match){
                setInstituionInstRow(match.value.instid);
                console.log("Got localid: " + math.value.instid);
            }
            else
                console.log("localinsid: it is empty " );
        };

        cursor.onerror = function () {
            console.log("Error: " + item.result.errorCode);
        }

    }

    request.onerror = function () {
        console.log("Error: " + request.result.errorCode );
    }

    request.oncomplete = function (){
        console.log("The transaction is done: setInstitutionRow()");
    }

    request.onupgradeneeded = function (){
        console.log("Upgrade needed ...");
    }

    request.onblocked = function(){
        console.log("DB is Blocked ...");
    }


} else {
    instid = localId;
    var now = new Date();
    //console.log("["+now.getTime()+"]setInstituionInstRow - instid set to "+localId);
    //open db, open objectstore;
    var request = indexedDB.open("kcapp_db", "1.0");

    request.onsuccess = function() {
        var db = this.result;   
        var tx = db.transaction ("INSTITUTIONS", "readonly");
        var store = tx.objectStore("INSTITUTIONS");

        var item = store.get(localId);
        console.log(item);

        item.onsuccess= function () {
            console.log ("Retrieved item: ");
            if (item.length > 0)
                var lInstitution = item.result.value;
                kitaDisplayValue = lInstitution.krippe;     
            };

        item.onerror = function () {
            console.log("Error: " + item.result.errorCode);
        }

    }


    request.onerror = function () {
        console.log("Error: " + request.result.errorCode );
    }


}

现在的问题是,

var request = indexedDB.open("kcapp_db", "1.0");

上述请求永远不会进入任何 onsuccess、oncomplete、onerror 状态。我使用 Chrome 工具进行调试,它从未进入任何上述状态。

因此,我没有从交易中获取任何数据。

Chrome 控制台中没有错误。

这是来自 Chrome 开发人员的请求值:

enter image description here

从上图中,readyState:done,这意味着它应该触发一个事件(成功、错误、阻塞等)。但它不会涉及其中任何一个。

我正在研究它,但仍然无法弄清楚为什么它不起作用。

必须提到 init() 中的其他函数的行为方式相同。

期待获得一些帮助。

最佳答案

您可能在 open 函数中使用了无效的版本参数。尝试使用 indexedDB.open('kcapp_db', 1); 代替。

关于javascript - IndexedDB 打开数据库请求奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28217985/

相关文章:

indexeddb - 适用于最新浏览器的最新 IndexedDB CRUD 场景?

html - IndexedDB 是否适用于混合 android 应用程序?

javascript - 在哪里可以找到好的 JavaScript/HTML AutoSuggest 示例

javascript - 如何放弃单击按钮时的表单更改?

javascript - 浏览器不处理报价参数

javascript - 如何只包含没有值的键,或者如何将不同的值放入 IndexedDb 中?

javascript - 从缺少属性的 indexedDB 对象存储中删除对象的有效方法

javascript -/undefined 多次出现在我的 404 错误日志中

javascript - 在 React 中单击两个元素之间切换 className

javascript - 如何过滤indexedDB中的100K记录?