Шрифт:
var indexedDB = window.indexedDB || // Использовать стандартный API БД
window.mozIndexedDB || // Или раннюю версию в Firefox
window.webkitlndexedDB; // Или раннюю версию в Chrome
// В Firefox не используются префиксы для следующих двух объектов:
var IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction;
var IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange;
// Эта функция будет использоваться для вывода сообщений об ошибках
function logerr(e) {
console.log("Ошибка IndexedDB " + e.code + ": " + e.message);
}
// Эта функция асинхронно получает объект базы данных (при необходимости
// создает и инициализирует базу данных) и передает его функции f.
function withDB(f) {
var request = indexedDB.open("zipcodes"); // Открыть базу данных zipcode
request.onerгог = logerr; // Выводить сообщения об ошибках
request.onsuccess = function { // Или вызвать эту функцию по завершении
var db = request.resu.lt; // Результатом запроса является база данных
// Базу данных можно открыть всегда, даже если она не существует.
// Мы проверяем версию, чтобы узнать, была ли БД создана и инициализирована.
// Если нет - это необходимо сделать. Но если БД уже настроена,
// остается просто передать ее функции f.
if (db.version === "1") f(db); // Если БД существует, передать ее f
else initdb(db,f); // Иначе сначала инициализировать ее
}
}
// Принимает почтовый индекс, отыскивает город, которому он принадлежит,
// и асинхронно передает название города указанной функции,
function lookupCity(zip, callback) {
withDB(function(db) {
// Создать объект транзакции для этого запроса
var transaction = db.transaction(["zipcodes"],
// Требуемое хранилище
IDBTransaction.READ_0NLY, // He обновлять
0); // Время ожидания не ограничено
// Получить хранилище объектов из транзакции
var objects = transaction.objectStoreC'zipcodes");
// Запросить объект, соответствующий указанному индексу.
// Строки выше выполнялись синхронно, но эта выполняется асинхронно
var request = objects.get(zip);
request.onerror = logerr; // Выводить сообщения об ошибках
request.onsuccess = function { // Передать результаты этой функции
// Искомый объект сейчас в свойстве request.result
var object = request.result;
if (object) // Если cootb. найдено, передать город и штат функции
callback(object.city + ", " + object.state);
else // Иначе сообщить о неудаче