JavaScript. Подробное руководство, 6-е издание, стр. 274

<b>  // Буквенные клавиши. Обратите внимание, что здесь не различаются</b>

<b>  // символы верхнего и нижнего регистров</b>

<b>  65:&quot;А&quot;, 66:&quot;В&quot;, 67:&quot;С&quot;. 68:&quot;D&quot;. 69:&quot;Е&quot;. 70:&quot;F&quot;, 71:&quot;G&quot;, 72:&quot;Н&quot;. 73:&quot;I&quot;,</b>

<b>  74:&quot;J&quot;, 75:&quot;К&quot;, 76:&quot;L”, 77:&quot;М&quot;, 78:&quot;N&quot;. 79:&quot;О&quot;. 80:&quot;Р&quot;, 81:&quot;Q&quot;. 82:&quot;R&quot;,</b>

<b>  83:”S&quot;, 84:&quot;Т&quot;, 85:&quot;U&quot;. 86:&quot;V&quot;, 87:&quot;W&quot;, 88:&quot;X&quot;. 89:&quot;Y&quot;, 90:&quot;Z&quot;,</b>

<b>  // Цифровые клавиши на дополнительной клавиатуре и клавиши со знаками препинания.</b>

<b>  // (Не поддерживаются в Opera.)</b>

<b>  96:&quot;О&quot;,97:&quot;1&quot;,98:&quot;2&quot;,99:&quot;3&quot;,100:&quot;4&quot;,101:&quot;5&quot;,102:”6&quot;,103:&quot;7&quot;,104:&quot;8&quot;,</b>

<b>  105:&quot;9&quot;,106:&quot;Multiply&quot;, 107:&quot;Add&quot;, 109:&quot;Subtract&quot;, 110:&quot;Decimal&quot;,</b>

<b>  111:&quot;Divide&quot;,</b>

<b>  // Функциональные клавиши</b>

<b>  112:&quot;F1&quot;, 113:&quot;F2&quot;, 114:&quot;F3&quot;, 115:&quot;F4&quot;. 116:&quot;F5&quot;, 117:&quot;F6&quot;,</b>

<b>  118:”F7&quot;, 119:&quot;F8&quot;, 120:&quot;F9&quot;, 121:&quot;F10&quot;, 122:&quot;F11&quot;, 123:&quot;F12&quot;,</b>

<b>  124:&quot;F13&quot;, 125:&quot;F14&quot;, 126:&quot;F15&quot;, 127:”F16&quot;, 128:&quot;F17&quot;, 129:&quot;F18&quot;,</b>

<b>  130:&quot;F19&quot;, 131:&quot;F20&quot;, 132:&quot;F21”, 133:&quot;F22”, 134:&quot;F23&quot;, 135:&quot;F24&quot;.</b>

<b>  // Клавиши со знаками препинания, для ввода которых не требуется</b>

<b>  // удерживать нажатой клавишу Shift.</b>

<b>  // Дефис не может использоваться переносимым способом: FF возвращает</b>

<b>  // тот же код, что и для клавиши Subtract</b>

<b>  59:&quot;;”, 61:&quot;=&quot;, 186:&quot;;&quot;, 187:&quot;=&quot;, // Firefox и Opera возвращают 59,61</b>

<b>  188:&quot;,&quot;, 190:&quot;.&quot;, 191:&quot;/&quot;, 192: , 219:&quot;[&quot;, 220:&quot;\\&quot;. 221:&quot;]&quot;, 222:&quot;'&quot; </b>

<b>};</b>

18

Работа с протоколом HTTP

Протокол передачи гипертекста (Hypertext Transfer Protocol, HTTP) определяет, как веб-броузеры должны запрашивать документы, как они должны передавать информацию веб-серверам и как веб-серверы должны отвечать на эти запросы и передачи. Очевидно, что веб-броузеры очень много работают с протоколом HTTP. Тем не менее, как правило, сценарии не работают с протоколом HTTP, когда пользователь щелкает на ссылке, отправляет форму или вводит URL в адресной строке.

Однако JavaScript-код способен работать с протоколом HTTP. HTTP-запросы могут инициироваться, когда сценарий устанавливает значение свойства

<b>location</b>
объекта
<b>Window</b>
или вызывает метод
<b>submit()</b>
объекта
<b>Form</b>
. В обоих случаях броузер загружает в окно новую страницу. Такого рода взаимодействие с протоколом HTTP может быть вполне оправданным в веб-страницах, состоящих из нескольких фреймов, но в этой главе мы будем говорить совсем о другом. Здесь мы рассмотрим такое взаимодействие JavaScript-кода с веб-сервером, при котором веб-броузер не перезагружает содержимое окна или фрейма.

Термин Ajax описывает архитектуру веб-приложений, отличительной чертой которых является работа с протоколом HTTP. [48]

Ключевой особенностью Ajax-приложения является использование протокола HTTP для инициации обмена данными с веб-сервером без необходимости перезагружать страницу. Возможность избежать перезагрузки страницы (что было привычным на первых этапах развития Всемирной паутины) позволяет создавать веб-приложения, близкие по своему поведению к обычным приложениям. Веб-приложение может использовать технологии Ajax для передачи на сервер результатов взаимодействия с пользователем или для ускорения запуска приложения, отображая сначала простую страницу и подгружая дополнительные данные и компоненты страницы по мере необходимости.

Термин Comet описывает похожую архитектуру веб-приложений, также использующих протокол HTTP. [49]

В некотором смысле архитектура Comet является обратной по отношению к Ajax: в архитектуре Comet не клиент, а сервер инициирует взаимодействие, асинхронно отсылая сообщения клиенту. Если веб-приложению потребуется отвечать на сообщения, отправляемые сервером, оно сможет использовать приемы Ajax для отправки или запроса данных. В архитектуре Ajax клиент «вытягивает» данные с сервера. В архитектуре Comet сервер «навязывает» данные клиенту. Иногда архитектуру Comet называют «Server Push», «Ajax Push» и «HTTP Streaming».

Есть множество способов реализации архитектур Ajax и Comet, и эти базовые реализации иногда называют транспортами. Элемент

<b>&lt;img&gt;,</b>
например, имеет свойство
<b>src</b>
. Когда сценарий записывает в это свойство URL-адрес, инициируется HTTP-запрос GET и выполняется загрузка содержимого с этого URL-адреса. Таким образом, сценарий может отправлять информацию веб-серверу, добавляя ее в виде строки запроса в URL-адрес изображения и устанавливая свойство src элемента
<b>&lt;img&gt;.</b>
В ответ на этот запрос веб-сервер должен вернуть некоторое изображение, которое, например, может быть невидимым: прозрачным и размером 1x1 пиксел. [50]