Чтение онлайн

на главную - закладки

Жанры

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

var div = document.createElementC'div"); // Создать <div>

div.appendChild(node); // Добавить текст, узел в div

document.body.insertBefore(div, input); // И добавить div перед input

input.scrollIntoView; // Прокрутить до появления

} // input в видимой области

// Передавать сообщения пользователя на сервер с помощью XMLHttpRequest

input.onchange = function { // При нажатии клавиши Enter

var msg = nick + ": " + input.value; // Имя пользователя + введ. текст

var xhr = new XMLHttpRequest; // Создать новый XHR

xhr.open("POST", "/chat"); // POST-запрос к /chat,

xhr.setRequestHeader("Content-Type", // Тип - простой текст UTF-8

"text/plain;charset=UTF-8");

xhr.send(msg); // Отправить сообщение

input.value = ""; // Приготовиться к вводу

} // следующего сообщения

};

</script>

<!-- Пользовательский интерфейс чата состоит из единственного поля ввода -->

<!-- Новые сообщения, отправленные в чат, вставляются перед полем ввода -->

<input id="input" style="width:100%"/>

На момент написания этих строк объект

EventSource
поддерживался в Chrome и Safari и должен был быть реализован компанией Mozilla в первом же выпуске Firefox, вышедшем после версии 4.0. В броузерах (таких как Firefox), где реализация объекта
XMLHttpRequest
возбуждает событие «readystatechange» в ходе загрузки ответа (для значения 3 в свойстве
readyState
) многократно, поведение объекта
EventSource
относительно легко имитировать с помощью объекта
XMLHttpRequest
, как демонстрируется в примере 18.16. С модулем имитации пример 18.15 будет работать в Chrome, Safari и Firefox. (Пример 18.16 не будет работать в броузерах ІE и Opera, поскольку реализации объекта
XMLHttpRequest
в этих броузерах не генерируют события в ходе загрузки.)

Пример 18.16. Имитация объекта

EventSource
с помощью
XMLHttpRequest

// Имитация прикладного интерфейса EventSource в броузерах, не поддерживающих его.

// Требует, чтобы XMLHttpRequest генерировал многократные события readystatechange

// в ходе загрузки данных из долгоживущих HTTP-соединений. Учтите, что это не полноценная

// реализация API: она не поддерживает свойство readyState, метод close, а также

// события open и error. Кроме того, регистрация обработчика события message выполняется

// только через свойство onmessage -- эта версия не определяет метод addEventListener

if (window.EventSource === undefined) { // Если EventSource не поддерживается,

window.EventSource = function(url) { // использовать эту его имитацию,

var xhr; // HTTP-соединение...

var evtsrc = this: // Используется в обработчиках,

var charsReceived = 0; // Так определяется появление нового текста

var type = null; // Для проверки свойства type ответа,

var data = ""; // Хранит данные сообщения

var eventName = "message": // Значение поля type объектов событий

var lastEventld = ""; // Для синхронизации с сервером

var retrydelay = 1000: // Задержка между попытками соединения

var aborted = false: // Установите в true, чтобы разорвать соединение

// Создать объект XHR

xhr = new XMLHttpRequest:

// Определить обработчик события для него

xhr.onreadystatechange = function {

switch(xhr.readyState) {

case 3: processData: break; // При получении фрагмента данных

case 4: reconnectO: break; // По завершении запроса

}

};

// И установить долгоживущее соединение

connect;

// Если соединение было закрыто обычным образом, ждать секунду

// и попробовать восстановить соединение

function reconnect {

if (aborted) return; // He восстанавливать после

Поделиться:
Популярные книги

Хозяин Теней 7

Петров Максим Николаевич
7. Безбожник
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Хозяин Теней 7

Гримуар темного лорда II

Грехов Тимофей
2. Гримуар темного лорда
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар темного лорда II

Последний Герой. Том 1

Дамиров Рафаэль
1. Последний герой
Фантастика:
попаданцы
альтернативная история
фантастика: прочее
5.00
рейтинг книги
Последний Герой. Том 1

Белые погоны

Лисина Александра
3. Гибрид
Фантастика:
фэнтези
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Белые погоны

Гримуар темного лорда IX

Грехов Тимофей
9. Гримуар темного лорда
Фантастика:
попаданцы
альтернативная история
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда IX

Кодекс Охотника. Книга XIII

Винокуров Юрий
13. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XIII

Железный Воин Империи II

Зот Бакалавр
2. Железный Воин Империи
Фантастика:
фэнтези
попаданцы
аниме
5.75
рейтинг книги
Железный Воин Империи II

Бастард Императора. Том 11

Орлов Андрей Юрьевич
11. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 11

Вернувшийся: Первые шаги. Том II

Vector
2. Вернувшийся
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Вернувшийся: Первые шаги. Том II

Прапорщик. Назад в СССР. Книга 6

Гаусс Максим
6. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прапорщик. Назад в СССР. Книга 6

Родословная. Том 4

Ткачев Андрей Юрьевич
4. Линия крови
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Родословная. Том 4

Офицер

Земляной Андрей Борисович
1. Офицер
Фантастика:
боевая фантастика
7.21
рейтинг книги
Офицер

Мастер решений

Земляной Андрей Борисович
3. Специалист по выживанию
Фантастика:
боевая фантастика
космическая фантастика
6.20
рейтинг книги
Мастер решений

Эволюционер из трущоб. Том 9

Панарин Антон
9. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 9