Javascript “错误”;提供给操作的数据不符合要求”;在indexedDB中添加对象时

Javascript “错误”;提供给操作的数据不符合要求”;在indexedDB中添加对象时,javascript,indexeddb,Javascript,Indexeddb,当我尝试使用.add将对象添加到objectStore时,控制台显示以下错误: DataError:提供给操作的数据不符合要求。如果有人能告诉我这个错误是从哪里来的,这对我真的很有帮助。代码如下: var request = objStore.add({tarea: todo, clase: "pendiente"}); var db; function create_to_do(){ var todo = document.querySelector('#the-do').value;

当我尝试使用.add将对象添加到objectStore时,控制台显示以下错误: DataError:提供给操作的数据不符合要求。如果有人能告诉我这个错误是从哪里来的,这对我真的很有帮助。代码如下:

var request = objStore.add({tarea: todo, clase: "pendiente"});

var db;

function create_to_do(){
  var todo = document.querySelector('#the-do').value;
  var transaction = db.transaction("to_do", "readwrite");
  transaction.oncomplete = function(eve){
    console.log("all done¡")
  }

  transaction.onerror= function(eve){
    console.log("something went wrong: "+ eve.target.errorCode);
  }; 

  var objStore = transaction.objectStore("to_do");
  var request = objStore.add({tarea: todo, clase: "pendiente"});
  request.onsuccess = function(eve){
    console.log("all done¡");
    console.log(eve.target.result);
  };
}

function indexDB(){
  var request = indexedDB.open('todos', 1);
    request.onsuccess = function (evt) {     
    db = this.result;
    console.log("Database Opened");
  };

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

  request.onupgradeneeded = function(evt){
    store = evt.currentTarget.result.createObjectStore("to_do", 
              {keyPath: 'id', autoIncrement: true});
    store.createIndex('clase', 'clase', {unique: false});
    console.log("index created");
  };
}

这是一个简单的打字错误。
createObjectStore()
方法的自动增量选项必须拼写为
autoIncrement
(大写I),而不是
autoIncrement


所发生的情况是,您的对象存储是在没有密钥生成器的情况下创建的,因此在添加对象时,它会根据密钥路径查找
id
属性。由于该属性不存在,因此您将获得
数据错误

尝试
keyPath:“keyPath”
autoIncrement:false
一旦您提供“主键”,您必须将autoIncrement设置为false查看它您正在尝试保存DOM对象。根据其中的内容,您将或将无法保存数据。尝试将tarea属性保留在对象之外并保存它。让我知道tarrea地产里有什么

var todo = document.querySelector('#the-do').value;
var request = objStore.add({tarea: todo, clase: "pendiente"});

对不起,谢谢你花了这么多时间,但不是那样,我确实更改了它,而且密钥路径也变了,哈哈,但不是那样,tarea属性的价值是什么?如果我看一下这个例子,它在你的例子中是一个变量。如果这是一个函数或无法在JSON中序列化的东西,则无法保存它。这是正确的。IDB中存储的东西必须能够被结构化克隆。DOM对象不工作。