Разве плохо открывать несколько соединений с базой данных в indexedDB?
Я немного поработал с IndexedDB, и я могу успешно создать новую базу данных, создать магазин и добавить значение во время "на обновление необходимо, Что я не делаюпонять, база данных остается "открыть" или вам нужно заново открывать его внутри каждой функции, которой нужен доступ для чтения / записи информации в базе данных?
Например, здесьs мой код (который работает) для создания новой базы данных и вставки одной записи:
$(document).ready(function() {
var db;
function initDB() {
console.log("opening db...");
var req = indexedDB.open(dbName, version);
req.onsuccess = function(event) {
db = this.result;
console.log("opening db is done");
}
req.onerror = function(event) {
console.log("error opening db: ", event.target.errorCode);
}
req.onupgradeneeded = function(event) {
db = event.target.result;
var store = db.createObjectStore("creds", { autoincrement: true });
store.add({ username:'none', password:'none'}, 1);
}
}
Что вызывает у меня путаницу, так это то, что когда мне нужно получить доступ к записям в этой базе данных, добавить дополнительные записи или удалить записи, я подумал, что могу просто создать новую функцию и вставить некоторые значения. Вот что у меня есть (что не получается):
function saveCreds() {
usr = $("#username").val();
psw = $("#password").val();
$.getJSON(baseURL + "cred-check/?callback=?", { username:usr, password:psw }, function(data) {
if (data.creds_good == 'true'); {
// NEXT LINE FAILS
var store = db.transaction(['creds'], 'readwrite').objectStore('creds');
var request = store.get(1);
request.onsuccess = function (event) {
var data = request.result;
data.username = usr;
data.password = psw;
var requestUpdate = store.put(data, 1);
requestUpdate.onerror = function(event) {
console.log("error putting value...");
}
}
}
});
}
этоsaveCreds
иinitDB
функция внутри$(document).ready()
функция иdb
переменная объявленавне initDB
а такжеsaveCreds
функции, новнутри $(document).ready()
так что я думаю, что мой охват был в порядке.
Проблема в том,db
переменная не определена. Я получаю ошибку:Cannot call method "transaction" of undefined
Значит ли это, что для каждой функции, которой требуется доступ к данным в базе данных, мне нужно заново открыть ее и переназначить для переменной, чтобы я мог манипулировать / читать данные в базе данных?