Невозможно добавить данные в хранилище объектов indexeddb

Я использую плагин jquery-indexed-db сделать пример проекта, чтобы просто изучить indexeddb.

JS-КОД

$(function() {
    /*Loggers*/
    write = function(info) {
        console.info(info);
    }

    writeError = function(e) {
        console.info(e);
    }

    /*Settings*/
    dbName = "testDB";
    osName = "list";

    /*DB Init*/
    db = $.indexedDB(dbName).then(write, writeError)

    /*ObjectStore Init*/
    objectStore = db.objectStore(osName, false);

    /*Adding a new record*/
    $("#submit").click(function(){
        objectStore.add( 
            {
                "Name": $("#name").val(),
                "Age": $("#age").val()
            },
            $("#id").val()
        ).then(write, writeError);

        $("#id").val("");
        $("#name").val("");
        $("#age").val("");

    });

});

HTML-КОД

<ul>
    <li>
        <input type="text" id="id" placeholder="Id" />
    </li>
    <li>
        <input type="text" id="name" placeholder="Name" />
    </li>
    <li>
        <input type="text" id="age" placeholder="Age" />
    </li>
    <li>
        <input type="button" id="submit" name="submit" value="Submit"/>
    </li>
</ul>

Я получаю исключение, когда нажимаю кнопку отправки. Ошибка заключается в следующем

IDBDatabaseException
code: 11
message: "InvalidStateError: DOM IDBDatabase Exception 11"
name: "InvalidStateError"
stack: "Error: An operation was called on an object on which it is not allowed or at a time when    it is not allowed.↵    at null.<anonymous>    (file:///*****/js/jquery.indexeddb.js:468:33)↵    at n (file:///******/js/jquery.js:1:14837)↵    at Object.o.add [as done] (file:///******/js/jquery.js:1:15052)↵    at Object.h.then (file:///******/js/jquery.js:1:16026)↵    at Object.<anonymous> (file:///******/js/jquery.indexeddb.js:465:17)↵    at Function.f.extend.Deferred (file:///******/js/jquery.js:1:16742)↵    at Object.$.extend.transaction (file:///******/js/jquery.indexeddb.js:464:15)↵    at Object.<anonymous> (file:///******/js/jquery.indexeddb.js:516:11)↵    at Function.f.extend.Deferred (file:///******/js/jquery.js:1:16742)↵    at op (file:///******/js/jquery.indexeddb.js:501:16)" type: "exception"

Я делаю что-то неправильно?

Я использую Google Chrome (версия 22.0.1229.94)


person Jacob George    schedule 02.11.2012    source источник
comment
Попробуйте мою библиотеку bitbucket.org/ytkyaw/ydn-db   -  person Kyaw Tun    schedule 02.11.2012


Ответы (1)


Вам нужно создать транзакцию, прежде чем вы сможете открыть хранилище объектов.

$.indexedDB(dbName).transaction([osName], 1).then(function(transaction){
    objectStore = transaction.objectStore(osName);
});

Кстати, это полный сценарий, который вы дали? Мне не хватает той части, где вы создаете хранилище объектов.

person Kristof Degrave    schedule 03.11.2012
comment
Хотя я добавил ваш код, я не думаю, что индексированная база данных была создана. В ресурсах моих инструментов разработки нет indexedDB. Кроме того, я использовал readwrite вместо 1 в сделке. - person Jacob George; 03.11.2012
comment
Если вы ничего там не видите, возможно, оно не создано. Вы получили какие-либо ошибки сейчас? Я не знаю, что вы готовы сделать, но я также создал обертку. (linq2indexeddb.codeplex.com) - person Kristof Degrave; 03.11.2012
comment
Ошибка заключалась в том, что мое хранилище объектов не было создано. Спасибо, ваш ответ привел меня в правильном направлении - person Jacob George; 03.11.2012