Почему db.transaction не работает с indexeddb?

Я новичок в использовании inxededdb и пытаюсь получить данные из магазина. Хранилище содержит данные, но по какой-то причине код останавливается после попытки установить var tx. Если я ничего не прошу, сообщите мне. Вот функция, с которой я пытаюсь получить книгу:

function getBook(){ var tx = db.transaction("book", "readonly"); var store = tx.objectStore("book"); var index = store.index("by_getid"); var request = index.get("<?php echo $_GET['book'] ?>"); request.onsuccess = function() { var matching = request.result; if (matching !== undefined) { document.getElementById("text-container").innerHTML = matching.text; } else { alert('no match'); report(null); } }; } 

Решенная версия:

 function getBook(){ var db; var request = indexedDB.open("library", 1); request.onsuccess = function (evt) { db = request.result; var transaction = db.transaction(["book"]); var objectStore = transaction.objectStore("book"); var requesttrans = objectStore.get(<?php echo $_GET['book'] ?>); requesttrans.onerror = function(event) { }; requesttrans.onsuccess = function(event) { alert(requesttrans.result.text); }; }; } 

Проблема, вероятно, в вашей переменной db. Вы, вероятно, получаете доступ к закрытому или нулевому экземпляру объекта соединения.

Попробуйте вместо этого создать db-соединение прямо внутри функции. НЕ используйте глобальную переменную db.

index.get первичный ключ. Вы должны получить значение записи, используя полученный первичный ключ.