<b> payment.innerHTML = ""; </b>
<b> // Стереть содержимое этих элементов total.innerHTML = totalinterest.innerHTML = "";</b>
<b> chart(); // При вызове без аргументов очищает диаграмму</b>
<b> }</b>
<b>}</b>
<b>// Сохранить ввод пользователя в свойствах объекта localStorage. Значения этих свойств </b>
<b>// будут доступны при повторном посещении страницы. В некоторых броузерах (например.</b>
<b>// в Firefox) возможность сохранения не поддерживается, если страница открывается</b>
<b>// с адресом URL вида file://. Однако она поддерживается при открытии страницы через HTTP.</b>
<b>function save(amount, apr, years, zipcode) {</b>
<b> if (window.localStorage) { // Выполнить сохранение, если поддерживается </b>
<b> localStorage.loan_amount = amount; </b>
<b> localStorage.loan_apr = apr; </b>
<b> localStorage.loan_years = years; </b>
<b> localStorage.loan_zipcode = zipcode;</b>
<b> }</b>
<b>}</b>
<b>// Автоматически восстановить поля ввода при загрузке документа, </b>
<b>window.onload = function() {</b>
<b> // Если броузер поддерживает localStorage и имеются сохраненные данные </b>
<b> if (window.localStorage && localStorage.loan_amount) {</b>
<b> document.getElementById("amount").value = localStorage.loan_amount;</b>
<b> document.getElementById("apr").value = localStorage.loan_apr;</b>
<b> document.getElementById("years").value = localStorage.loan_years;</b>
<b> document.getElementById("zipcode").value = localStorage.loan_zipcode;</b>
<b> }</b>
<b>};</b>
<b>// Передать ввод пользователя серверному сценарию, который может (теоретически) возвращать </b>
<b>// список ссылок на сайты местных кредитных учреждений, готовых предоставить кредит.</b>
<b>// Данный пример не включает фактическую реализацию такого сценария поиска кредитных </b>
<b>// учреждений. Но если такой сценарий уже имеется, данная функция могла бы работать с ним. </b>
<b>function getLenders(amount, apr, years, zipcode) {</b>
<b> // Если броузер не поддерживает объект XMLHttpRequest, не делать ничего </b>
<b> if (!window.XMLHttpRequest) return;</b>
<b> // Отыскать элемент для отображения списка кредитных учреждений </b>
<b> var ad = document.getElementById("lenders”);</b>
<b> if (!ad) return; // Выйти, если элемент отсутствует</b>
<b> // Преобразовать ввод пользователя в параметры запроса в строке URL </b>
<b> var url = "getLenders.php" + // Адрес URL службы плюс</b>
<b> "?amt=" + encodeURIComponent(amount) + // данные пользователя </b>
<b> "&apr=" + encodeURIComponent(apr) + //в строке запроса</b>
<b> "&yrs=" + encodeURIComponent(years) +</b>
<b> "&zip=" + encodeURIComponent(zipcode);</b>
<b> // Получить содержимое по заданному адресу URL с помощью XMLHttpRequest</b>
<b> var req = new XMLHttpRequest(); // Создать новый запрос</b>
<b> req.open("GET", url); // Указать тип запроса HTTP GET для url</b>
<b> req.send(null); // Отправить запрос без тела</b>
<b> // Перед возвратом зарегистрировать обработчик события, который будет вызываться </b>
<b> // при получении HTTP-ответа от сервера. Такой прием асинхронного программирования </b>
<b> // является довольно обычным в клиентском JavaScript, </b>
<b> req.onreadystatechange = function() {</b>
<b> if (req.readyState == 4 && req.status == 200) {</b>
<b> // Если мы попали сюда, следовательно, был получен корректный НТТР-ответ </b>
<b> var response = req.responseText; // HTTP-ответ в виде строки</b>
<b> var lenders = JSON.parse(response); // Преобразовать в JS-массив</b>
<b> // Преобразовать массив объектов lender в HTML-строку </b>
<b> var list = "";</b>
<b> for(var і = 0; і < lenders.length; i++) {</b>
<b> list += "<li><a href=' " + lenders[i].url + " '>"+</b>
<b> lenders[i].name + "</a>";</b>
<b> }</b>