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

<b>    payment.innerHTML = &quot;&quot;; </b>

<b>    // Стереть содержимое этих элементов total.innerHTML = totalinterest.innerHTML = &quot;&quot;;</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 &amp;&amp; localStorage.loan_amount) {</b>

<b>    document.getElementById(&quot;amount&quot;).value = localStorage.loan_amount;</b>

<b>    document.getElementById(&quot;apr&quot;).value = localStorage.loan_apr;</b>

<b>    document.getElementById(&quot;years&quot;).value = localStorage.loan_years;</b>

<b>    document.getElementById(&quot;zipcode&quot;).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(&quot;lenders”);</b>

<b>  if (!ad) return; // Выйти, если элемент отсутствует</b>

<b>  // Преобразовать ввод пользователя в параметры запроса в строке URL </b>

<b>  var url = &quot;getLenders.php&quot; + // Адрес URL службы плюс</b>

<b>    &quot;?amt=&quot; + encodeURIComponent(amount) + // данные пользователя </b>

<b>    &quot;&amp;apr=&quot; + encodeURIComponent(apr) + //в строке запроса</b>

<b>    &quot;&amp;yrs=&quot; + encodeURIComponent(years) +</b>

<b>    &quot;&amp;zip=&quot; + encodeURIComponent(zipcode);</b>

<b>  // Получить содержимое по заданному адресу URL с помощью XMLHttpRequest</b>

<b>  var req = new XMLHttpRequest(); // Создать новый запрос</b>

<b>  req.open(&quot;GET&quot;, 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 &amp;&amp; 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 = &quot;&quot;;</b>

<b>      for(var і = 0; і &lt; lenders.length; i++) {</b>

<b>        list += &quot;&lt;li&gt;&lt;a href=' &quot; + lenders[i].url + &quot; '&gt;&quot;+</b>

<b>          lenders[i].name + &quot;&lt;/a&gt;&quot;;</b>

<b>      }</b>