>
>// список ссылок на сайты местных кредитных учреждений, готовых предоставить кредит.
>// Данный пример не включает фактическую реализацию такого сценария поиска кредитных
>// учреждений. Но если такой сценарий уже имеется, данная функция могла бы работать с ним.
>function getLenders(amount, apr, years, zipcode) {
> // Если броузер не поддерживает объект XMLHttpRequest, не делать ничего
> if (!window.XMLHttpRequest) return;
> // Отыскать элемент для отображения списка кредитных учреждений
> var ad = document.getElementById("lenders”);
> if (!ad) return; // Выйти, если элемент отсутствует
> // Преобразовать ввод пользователя в параметры запроса в строке URL
> var url = "getLenders.php" + // Адрес URL службы плюс
> "?amt=" + encodeURIComponent(amount) + // данные пользователя
> "&apr=" + encodeURIComponent(apr) + //в строке запроса
> "&yrs=" + encodeURIComponent(years) +
> "&zip=" + encodeURIComponent(zipcode);
> // Получить содержимое по заданному адресу URL с помощью XMLHttpRequest
> var req = new XMLHttpRequest(); // Создать новый запрос
> req.open("GET", url); // Указать тип запроса HTTP GET для url
> req.send(null); // Отправить запрос без тела
> // Перед возвратом зарегистрировать обработчик события, который будет вызываться
> // при получении HTTP-ответа от сервера. Такой прием асинхронного программирования
> // является довольно обычным в клиентском JavaScript,
> req.onreadystatechange = function() {
> if (req.readyState == 4 && req.status == 200) {
> // Если мы попали сюда, следовательно, был получен корректный НТТР-ответ
> var response = req.responseText; // HTTP-ответ в виде строки
> var lenders = JSON.parse(response); // Преобразовать в JS-массив
> // Преобразовать массив объектов lender в HTML-строку
> var list = "";
> for(var і = 0; і < lenders.length; i++) {
> list += ""+
> lenders[i].name + "";
> }
> // Отобразить полученную HTML-строку в элементе,
> // ссылка на который была получена выше.
> ad.innerHTML = "";
> }
> }
>}
>// График помесячного изменения остатка по кредиту, а также графики сумм,
>// выплачиваемых в погашение кредита и по процентам в HTML-элементе
>// Если вызывается без аргументов, просто очищает ранее нарисованные графики,
>function chart(principal, interest, monthly, payments) {
> var graph = document.getElementById("graph"); // Ссылка на тег
> graph.width = graph.width; // Магия очистки элемента canvas
> // Если функция вызвана без аргументов или броузер не поддерживает