Книга: Выразительный JavaScript
Запуск
Запуск
Первое, что клиент должен сделать при загрузке страницы, это запросить с сервера текущий набор тем. Так как мы будем делать много HTTP-запросов, мы определим небольшую обёртку вокруг XMLHttpRequest
, которая примет объект для настройки запроса и обратного вызова по окончанию запроса.
function request(options, callback) {
var req = new XMLHttpRequest();
req.open(options.method || "GET", options.pathname, true);
req.addEventListener("load", function() {
if (req.status < 400)
callback(null, req.responseText);
else
callback(new Error("Request failed: " + req.statusText));
});
req.addEventListener("error", function() {
callback(new Error("Network error"));
});
req.send(options.body || null);
}
Начальный запрос показывает полученные темы на экране и начинает процесс длинных запросов, вызывая waitForChanges
.
var lastServerTime = 0;
request({pathname: "talks"}, function(error, response) {
if (error) {
reportError(error);
} else {
response = JSON.parse(response);
displayTalks(response.talks);
lastServerTime = response.serverTime;
waitForChanges();
}
});
Переменная lastServerTime
используется для отслеживания времени последнего обновления, полученного с сервера. После начального запроса, вид тем у клиента соответствует виду тем сервера, которые был у него в момент запроса. Таким образом, свойство serverTime
, включаемое в ответ, предоставляет правильное начальное значение lastServerTime
.
Когда запрос не удался, нам не надо, чтобы страница просто сидела и ничего не делала. Мы определим простую функцию под названием reportError
, которая хотя бы покажет пользователю диалог, сообщающий об ошибке.
function reportError(error) {
if (error)
alert(error.toString());
}
Функция проверяет, есть ли ошибка, и выводит сообщение только при её наличии. Таким образом, мы можем напрямую передавать эту функцию в запрос для тех запросов, ответ на которые можно игнорировать. Тогда если запрос завершится с ошибкой, то об ошибке будет сообщено пользователю.
- Запуск InterBase-сервера
- Практическая работа 53. Запуск Access. Работа с объектами базы данных
- Одновременный запуск нескольких копий сервера (multi-instancing)
- Запуск Access. Открытие учебной базы данных Борей
- Способы «запуска» слухов
- Запуск сценариев на удаленных машинах. Контроль за ходом выполнения таких сценариев
- Как ускорить запуск программ?
- Как сделать, чтобы при запуске Windows автоматически открывались папки, с которыми я работал в прошлый раз?
- Могу ли я изменить или отключить звуки, которые проигрываются при запуске Windows, щелчке кнопкой мыши на папке и т. д.?
- Я случайно удалил ярлык Свернуть все окна с панели быстрого запуска. Как вернуть его обратно?
- На Панели быстрого запуска возле кнопки меню Пуск вмещается всего три значка. Как увеличить ее емкость?
- Как автоматически запускать ту или иную программу сразу после запуска Windows?