【问题标题】:Uncaught DOMException: Failed to execute 'put' on 'IDBObjectStore': Evaluating the object store's key path did not yield a value未捕获的 DOMException:无法在“IDBObjectStore”上执行“放置”:评估对象存储的键路径未产生值
【发布时间】:2018-08-05 21:56:57
【问题描述】:

我有一个 indexeddb,当我第一次在我的 chrome 中打开我的网站并尝试调用 init.savedb();我收到一条错误消息 未捕获的 DOMException:无法在 'IDBObjectStore' 上执行 'put':评估对象存储的键路径没有产生值。

然后我重新加载页面,一切正常。

有人知道我做错了什么吗?

代码如下:

var model = {
everything: {},
db: {},
goals: [],
tags: [],



init: function () {
    var openReq = window.indexedDB.open("micromanagerv999");
    openReq.onupgradeneeded = function (event) {

        model.db = event.target.result;
        var objectStore = model.db.createObjectStore("Everything", { keyPath: "id" });

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


    };
    openReq.onsuccess = function (event) {
        model.db = event.target.result;
        model.db.transaction("Everything", "readonly").objectStore("Everything").count().onsuccess = function (event) {
            if (event.target.result === 0) {


                var basictemplate = {
                    id: "idee",
                    goals: [],

                };
                var addReq = model.db.transaction("Everything", "readwrite").objectStore("Everything").add(basictemplate);

            } else {
                model.db.transaction("Everything", "readonly").objectStore("Everything").get("idee").onsuccess = function (e) {

                    model.everything = e.target.result;
                    model.goals = model.everything.goals;
                    if (model.everything.tags == undefined) {
                        model.everything.tags = [];
                        model.tags = model.everything.tags;
                    } else {
                        model.tags = model.everything.tags;
                    }

                   microGoals.renderArray();
                };

            }

        };
        openReq.onerror = function (event) {
            console.log("Operation failed");
        };

    }
},
savedb: function () {



    var update = model.db.transaction("Everything", "readwrite").objectStore("Everything").put(model.everything);

    update.onerror = function (event) {
        console.log(event);
    }
}



};  // End of MODEL

【问题讨论】:

  • 在savedb中,在调用put之前尝试记录model.everything的值,并检查对象是否有一个名为id的属性
  • 谢谢,它现在可以工作了。

标签: indexeddb


【解决方案1】:

只是回答,以便您可以标记为已回答。看我的评论:

在savedb中,在调用put之前尝试记录model.everything的值,并检查对象是否有一个名为id的属性

【讨论】:

    猜你喜欢
    • 2020-12-04
    • 2015-02-19
    • 2020-06-26
    • 2019-08-16
    • 1970-01-01
    • 2022-06-17
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多