JavaScript. Подробное руководство, 6-е издание
Шрифт:
// Создать хранилище объектов, указав имя хранилища и объект с параметрами,
// включающий "путь к ключу", определяющий имя свойства-ключа для этого
// хранилища. (Если опустить путь к ключу, IndexedDB определит свой
// собственный уникальный целочисленный ключ.)
var store = db.createObjectStore("zipcodes", // имя хранилища
{ keyPath: "zipcode" });
// Создать в хранилище объектов индекс по названию города.
// Строка пути к ключу передается этому методу непосредственно,
// как обязательный аргумент, а не как свойство объекта с параметрами,
store.createlndex("cities", "city");
// Теперь необходимо загрузить информацию о почтовых индексах, преобразовать
// ее в объекты и сохранить эти объекты в созданном выше хранилище.
//
// Файл с исходными данными содержит строки следующего вида:
//
// 02130,Jamaica Plain,MA.42.309998,-71.11171
// 02131,Roslindale,MA,42.284678,-71.13052
// 02132,West Roxbury.MA,42.279432,-71.1598
// 02133,Boston,MA,42.338947,-70.919635
// 02134,Allston,MA, 42.355147,-71.13164
//
// Как ни странно, но почтовая служба США не обеспечивает свободный доступ
// к этой информации, поэтому мы будет использовать устаревшие данные переписи
// с сайта: http://mappinghacks.com/2008/04/28/civicspace-zip-code-database/
// Для загрузки данных используется объект XMLHttpRequest.
// Но для обработки данных по мере поступления будут использованы
// новые события onload и onprogress, определяемые спецификацией XHR2
var xhr = new XMLHttpRequest; // Объект XHR для загрузки данных
xhr.open("GET", "zipcodes.csv"); // HTTP-запрос типа GET для этого URL
xhr.send; // Запустить немедленно
xhr.oneг гог = status; // Отображать сообщения об ошибках
var lastChar = 0, numlines = 0; // Уже обработанный объем
// Обрабатывает файл базы данных блоками, по мере загрузки
xhr.onprogress = xhr.onload = function(e) { // Сразу два обработчика!
// Обработать блок между lastChar и последним принятым символом
// перевода строки. (Нам требуется отыскать последний символ
// перевода строки, чтобы не обработать неполную запись)
var lastNewline = xhr.responseText.lastIndexOf("\n");
if (lastNewline > lastChar) {
var chunk = xhr.responseText.substring(lastChar, lastNewline)
lastChar = lastNewline + 1; // Откуда начинать в следующий раз
// Разбить новый фрагмент на строки
var lines = chunk.split("\n”);
numlines += lines.length;
// Чтобы вставить информацию о почтовом индексе в базу данных, необходимо
// получить объект транзакции. Все операции добавления объектов
// в базу данных, выполняемые с использованием этого объекта,
// будут автоматически подтверждаться после выхода из этой функции,
// когда броузер вернется в цикл обработки событий.
// Чтобы создать объект транзакции, следует определить,
// какие хранилища объектов будут использоваться (у нас имеется всего
// одно хранилище). Кроме того, требуется сообщить, что будет
// выполняться не только чтение, но и запись в базу данных:
var transaction = db.transaction(["zipcodes’'], // хранилища
IDBTransaction.READ_WRITE);
// Получить ссылку на хранилище из объекта транзакции
var store = transaction.objectStore("zipcodes");
// Теперь обойти в цикле строки в файле с почтовыми индексами,
Поделиться:
Популярные книги
Запечатанный во тьме. Том 3
3. Хроники Арнея
Фантастика:
уся
эпическая фантастика
фэнтези
5.00
рейтинг книги
Ермак. Телохранитель
2. Ермак
Фантастика:
альтернативная история
7.00
рейтинг книги
Телохранитель Генсека. Том 1
1. Медведев
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Дважды одаренный. Том VI
6. Дважды одаренный
Фантастика:
аниме
альтернативная история
фэнтези
фантастика: прочее
5.00
рейтинг книги
Морской волк. 1-я Трилогия
1. Морской волк
Фантастика:
альтернативная история
8.71
рейтинг книги
Оживший камень
1. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Изгой Проклятого Клана. Том 2
2. Изгой
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Морской лорд. Том 1
2. Вечный капитан
Фантастика:
попаданцы
историческое фэнтези
8.12
рейтинг книги
Третий. Том 3
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXIV
24. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Первый среди равных. Книга IV
4. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Виконт, который любил меня
2. Бриджертоны
Любовные романы:
исторические любовные романы
9.13
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 24
24. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Приказано выжить!
1. Другая Русь
Фантастика:
боевая фантастика
попаданцы
альтернативная история
7.09