当我尝试使用.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");
};
}
答案 0 :(得分:3)
尝试keyPath: 'keyPath'
或autoIncrement: false
提供“主键”后,必须将autoIncrement设置为false才能看到here
答案 1 :(得分:3)
您正在尝试保存DOM对象。根据其中的内容,您将能够或将无法保存数据。尝试将tarea属性从对象中删除并保存。让我知道tarrea属性中的内容
var todo = document.querySelector('#the-do').value;
var request = objStore.add({tarea: todo, clase: "pendiente"});
答案 2 :(得分:0)
这是一个简单的错字。 createObjectStore()
方法的自动增量选项必须拼写为autoIncrement
(带有大写字母I),而不是autoincrement
。
在没有密钥生成器的情况下创建对象存储库会发生什么情况,因此在添加对象时,它会根据您的密钥路径查找id
属性。由于该属性不存在,因此您获得DataError
。