Другой вариант обработки ошибок заключается в незаметных для пользователя повторных попытках получить необходимую информа¬цию от сервера либо в течение некоторого промежутка времени, либо за счет ограниченного числа повторных попыток. Напомним еще раз: если функциональность Ajax не имеет ключевой важности для страни¬цы, то нет никакой необходимости уведомлять пользователя об ошиб¬ках. Лучше делать это за кулисами.Проиллюстрируем реализацию шаблона повторных попыток, рассмот¬рев пример многоступенчатой загрузки. В нем дополнительные ссыл¬ки после загрузки отображаются рядом с текстом статьи. Если ошибка произойдет в процессе исполнения запроса, большинство броузеров выведет сообщение об ошибке. Пользователь понятия не имеет, что это за ошибка и чем она вызвана,1 так зачем тогда вообще отображать сообщение о ней? В этом случае проще было бы несколько раз попыт ся загрузить список ссылок, после чего прекратить попытки.
Для того чтобы подсчитывать количество неудачных попыток, нео дима глобальная переменная:
Изначально переменная iFailed содержит значение 0 и увеличива на 1 всякий раз, когда возникает ошибка. Таким образом, когда зна ние переменной iFailed достигнет некоторого заранее заданного зн ния, можно прекратить отправку новых запросов. Так, для того ч~ предпринять десять попыток, прежде чем прекратить посылать за сы, можно сделать следующее:
function downloadLinksO {
var oXmlHttp = zXmlHttp.createRequest();
■v^Лf:ЛiFaiied;я10Ы^
oXmlHttp.open("get", "AdditionalLihks.txt", true); oXmlHttp.onreadystatechange = function () { if (oXmlHttp.readyState == 4) { if (oXmlHttp.status == 200) { var divAdditionalLinks =
document.getElementById("divAdditionalLinks divAdditionalLinks.innerHTML = oXmlHttp.responseT divAdditionalLinks.style.display = "block";
} else {
throw new Error("Возникла ошибка!");

)
oXmlHttp.send(null);
} catch (oException) { iFailed++; downloadLinksO;

}
}
Этот код реализует алгоритм, аналогичный предыдущему прим Блок try.. .catch добавляется для перехвата любых ошибок, кото могут произойти как процессе взаимодействия, так и в результате лучения кода состояния HTTP, отличного от 200. Основное отличие стоит в том, что когда исключение будет перехвачено, значение п менной iFailed увеличится на 1 и будет произведен повторный в функции downloadLinksO. Повторные попытки загрузки дополни ных ссылок будут производиться до тех пор, пока значение пере ной iFailed не достигнет 10.
Вообще модель с повторными попытками следует применять, только если запрос единственный, как в примере с многостадийной загруз¬кой. Если прибегнуть к этому шаблону, имея дело с запросами, запус¬каемыми через определенные интервалы времени, как в примере с пе¬риодическим обновлением, то в конце концов можно полностью исчер-, память