尝试向indexedDB添加数据时出错“提供给操作的数据不符合要求”

时间:2012-03-28 03:20:15

标签: indexeddb

我不知道这段代码有什么问题:

onupgradeneeded = function(){
  z = e.currentTarget.result.createObjectStore(
                       'record', 
                       {keyPath:'id',autoIncrement:true}
  );
  z.createIndex('book', 'book', {unique:false});
  z.createIndex('user', 'user', {unique:false});
}

当我尝试使用以下代码将数据放入对象存储区时:

db.transaction('record',IDBTransaction.READ_WRITE)
    .objectStore('record')
    .add({book:...,user:...})

我收到以下错误消息:

Data provided to an operation does not meet requirements

1 个答案:

答案 0 :(得分:2)

createIndex需要在setVersion交易(2011年12月之前的规格,当前版本的Chrome和IE支持)和最新的onupgradeneeded回调中进行调用spec(目前仅由FF支持,但IE10及更高版本的Chrome将升级到此版本。)

createIndex的{​​{3}}描述列出了您看到错误的原因:

  

createIndex:此方法创建并返回具有给定的新索引   连接数据库中的名称和参数。如果这个功能是   从外部调用一个VERSION_CHANGE事务回调,   实现必须抛出类型为InvalidStateError的DOMException   异常。

有关setVersiononupgradeneeded之间差异的详细信息,请查看spec,其中说明了代码中的更改。