Шрифт:
callback("Неизвестный индекс");
}
});
}
// По указанному названию города отыскивает все почтовые индексы для всех
// городов (в любом штате) с этим названием (с учетом регистра символов).
// Асинхронно передает результаты по одному указанной функции
function lookupZipcodes(city, callback) {
withDB(function(db) {
// Как и выше, создаем транзакцию и получаем хранилище объектов
var transaction = db.transaction(["zipcodes"], IDBTransaction.READ_0NLY, 0);
var store = transaction.objectStoreC'zipcodes");
// На этот раз нам требуется получить индекс по названиям городов
var index = store.index(”cities");
// Этот запрос может вернуть несколько результатов, поэтому, чтобы
// получить их все, следует использовать объект курсора. Чтобы создать
// курсор, нужно создать объект диапазона, представляющий диапазон ключей
var range = new IDBKeyRange.only(city); // Диапазон с одним ключом
// Все, что выше, выполняется синхронно.
// Теперь нужно запросить курсор, который возвращается асинхронно,
var request = index.openCursor(range); // Запросить курсор
request.onerror = logerr; // Сообщать об ошибках
request.onsuccess = function { // Передать курсор этой функции
// Этот обработчик событий будет вызван несколько раз, по одному
// для каждой записи, соответствующей запросу, и еще один раз
// с пустым курсором, указывающим на окончание результатов,
var cursor = request.result // Курсор в свойстве
request.result if (!cursor) return; // Нет курсора = нет результатов
var object = cursor.value // Получить совпавшую запись
callback(object); // Передать ее указанной функции
cursor.continue; // Запросить следующую запись
};
});
}
// Эта функция используется обработчиком onchange в документе ниже.
// Она выполняет запрос к БД и отображает результаты
function displayCity(zip) {
lookupCity(zip, function(s) { document.getElementById('city').value=s; });
}
// Это другая функция, используемая обработчиком onchange в документе ниже.
// Она выполняет запрос к БД и отображает результаты
function displayZipcodes(city) {
var output = document.getElementById("zipcodes");
output.innerHTML = "Найденные индексы:";
lookupZipcodes(city, function(o) {
var div = document.createElement("div");
var text = o.zipcode + ": + o.city + ", " + o.state;