2013-02-22 6 views
2

.add를 사용하여 objectStore에 객체를 추가하려고하면 콘솔에 다음 오류가 표시됩니다. DataError : 요구 사항을 충족시키지 못한다. 누군가가이 오류의 출처를 알 수 있다면 정말 도움이 될 것입니다. 다음 코드입니다.오류 indexedDB에 객체를 추가 할 때 "조작에 제공된 데이터가 요구 사항을 충족하지 않습니다"

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

tarea 속성의 값은 무엇입니까? 제가 예제를 보면 여러분의 경우 변수입니다. JSON에서 직렬화 할 수없는 함수 또는 함수라면 저장할 수 없습니다. –

답변

0

간단한 오타입니다. createObjectStore() 방법에 대한 자동 증가 옵션은 autoincrement이 아닌 autoIncrement (대문자 I 포함)로 철자해야합니다.

개체 저장소가 키 생성기없이 만들어 지므로 개체를 추가 할 때 키 경로에 따라 id 속성을 찾고 있습니다. 속성이 존재하지 않기 때문에 당신은 DataError을 얻습니다. 당신은 당신이 당신은 DOM 객체를 저장하려는 것이 here

+0

죄송합니다. 시간을내어 주셔서 감사합니다. 그러나 그 것이 아닙니다. 나는 그것을 변경했고 keyPath도 너무 놀랐지 만 – AssassinPinguin

3

keyPath: 'keyPath' 또는 autoIncrement: false보십시오. 여기에있는 내용에 따라 데이터를 저장하거나 저장하지 못할 수도 있습니다. 개체에서 tarea 속성을 그대로두고 저장하십시오. tarrea 속성에 무엇이 있는지 알려주세요.

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

링크가 내 관련없는 문제를 해결하는 데 도움이되었습니다 .-) –

3

볼 false로 자동 증가를 설정해야는 "기본 키"를 제공하면

+0

맞습니다. IDB에 저장된 내용은 복제 된 구조로되어 있어야합니다. DOM 개체가 작동하지 않습니다. https://developer.mozilla.org/en-US/docs/DOM/The_structured_clone_algorithm#Things_that_don't_work_with_structured_clones – dgrogan

관련 문제