JavaScript. Подробное руководство, 6-е издание, стр. 402
<b> IDBTransaction.READ_WRITE);</b><b> // Получить ссылку на хранилище из объекта транзакции</b><b> var store = transaction.objectStore("zipcodes");</b><b> // Теперь обойти в цикле строки в файле с почтовыми индексами,</b><b> // создать на их основе объекты и добавить их в хранилище.</b><b> for(var і = 0; і < lines.length; i++) {</b><b> var fields = lines[i].split(",");// Значения через запятую</b><b> var record = { // Сохраняемый объект</b><b> zipcode: fields[0], // Все свойства - строки</b><b> city: fields[1],</b><b> state: fields[2],</b><b> latitude: fields[3],</b><b> longitude: fields[4]</b><b> };</b><b> // Вся прелесть IndexedDB API в том, что хранилище</b><b> // объектов *по-настоящему* просто использовать.</b><b> // Следующая строка добавляет запись:</b><b> store.put(record); // Или add(), чтобы избежать затирания</b><b> }</b><b> status("Инициализация базы данных, загружено записей:</b><b> + numlines + ".");</b><b> }</b><b> if (e.type == "load") {</b><b> // Если это было последнее событие load, значит, мы отправили в базу</b><b> // данных все сведения о почтовых индексах. Но, так как мы только</b><b> // что обработали порядка 40000 записей, они все еще могут записываться</b><b> // в хранилище. Поэтому мы выполним простой запрос. Когда он будет</b><b> // успешно выполнен, это послужит сигналом, что база данных готова</b><b> // к работе, и наконец можно удалить строку сообщения и вызвать</b><b> // функцию f(), которая так давно была передана функции withDB()</b><b> lookupCity("02134",</b><b> function(s) { // Allston, MA</b><b> document.body.removeChild(statusline); withDB(f);</b><b> });</b><b> }</b><b> }</b><b> }</b><b>}</b><b></script></b><b></head></b><b><body></b><b><р>Введите почтовый индекс, чтобы отыскать город:</р></b><b>Индекс: <input onchange="displayCity(this.value)"></input></b><b>Город: <output id="city"></output></b><b></div></b><b><div></b><b> <р>Введите название города (с учетом регистра символов, без названия штата),</b><b> чтобы отыскать все города с этим названием и их почтовые индексы:</р></b><b> Город: <input onchange="displayZipcodes(this.value)"></input></b><b> <div id="zipcodes"></div></b><b></div></b><b><р><і>Зтот пример работает только в Firefox 4 и Chrome 11.</i></p></b><b><р><і>Выполнение первого запроса может занять длительное время.</і></р></b><b><р><і>Вам может потребоваться запустить Chrome с </b><b>ключом --unlimited-quota-for-indexeddb</i></p></b><b></body></b><b></html></b>22.9. Веб-сокеты
В главе 18 демонстрируется, как клиентские сценарии на языке JavaScript могут взаимодействовать с серверами по сети. Все примеры в этой главе используют протокол HTTP, а это означает, что все они ограничены исходной природой протокола HTTP: этот протокол, не имеющий информации о состоянии, состоит из запросов клиента и ответов сервера. Протокол HTTP фактически является узкоспециализированным сетевым протоколом. Более универсальные сетевые взаимодействия через Интернет (или через локальные сети) часто реализуются с использованием долгоживущих соединений и обеспечивают двунаправленный обмен сообщениями через TCP-сокеты. Довольно небезопасно предоставлять клиентскому сценарию на языке JavaScript доступ к низкоуровневым ТСР-сокетам, однако спецификация «WebSocket АРІ» определяет безопасную альтернативу: она позволяет клиентским сценариям создавать двунаправленные соединения с серверами, поддерживающими протокол веб-сокетов. Это существенно упрощает решение некоторых сетевых задач.
Прикладной интерфейс веб-сокетов удивительно прост в использовании. Сначала необходимо создать сокет с помощью конструктора
<b>WebSocket():</b>