Ошибка «Данные, предоставленные операции, не соответствуют требованиям» при попытке добавить данные в indexedDB - PullRequest
2 голосов
/ 28 марта 2012

Понятия не имею, что не так с этим кодом:

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 Ответ

2 голосов
/ 28 марта 2012

createIndex необходимо вызывать из транзакции setVersion (спецификация до декабря 2011 г., поддерживаемая текущими версиями Chrome и IE) и из onupgradeneeded обратного вызова в последней спецификации (в настоящее время поддерживается толькоFF, но IE10 и более поздние версии Chrome обновятся до этого).

Описание spec createIndex объясняет, почему вы видите ошибку, которую видите:

createIndex: Этот метод создает и возвращает новый индекс с заданным именем и параметрами в подключенной базе данных.Если эта функция вызывается извне обратного вызова транзакции VERSION_CHANGE, реализация должна генерировать исключение DOMException типа InvalidStateError.

Для получения дополнительной информации о разнице между setVersion и onupgradeneeded проверьте это сообщение от людей IE , в котором объясняются изменения в коде.

...