Ошибка "Данные, предоставленные операции, не соответствуют требованиям" при добавлении объектов в indexedDB

Когда я пытаюсь добавить объект в storeStore с помощью.add, консоль показывает эту ошибку: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 ответа

Пытаться keyPath: 'keyPath' или же autoIncrement: false как только вы предоставите "первичный ключ", вы должны установить autoIncrement в false, смотрите здесь

Вы пытаетесь сохранить объект DOM. В зависимости от того, что там, вы можете или не сможете сохранить свои данные. Попробуйте оставить свойство tarea вне объекта и сохраните его. И дайте мне знать, что находится в собственности tarrea

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

Это простая опечатка. Опция автоинкремента к createObjectStore() метод должен быть прописан autoIncrement (с большой буквы), а не autoincrement,

Что происходит, так это то, что ваше хранилище объектов создается без генератора ключей, поэтому при добавлении объекта он ищет id собственность согласно вашему ключевому пути. Поскольку собственность не существует, вы получаете DataError,

Другие вопросы по тегам