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

时间:2013-02-22 16:10:02

标签: 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;
  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");
  };
}

3 个答案:

答案 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