Page 307 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 307

его  непрерывной  работы  <span  data-replace= u ptim " > ? ? ?</span>  секунд .
                                                         e
                                                   "
       </div>
          Т е перь, когда есть элемент для отображения данных, поступающих с сервера, мы
       можем использовать объект XMLHttpRequest, чтобы выполнить Аjах-запрос. Внизу
       вашего НТМL-файла (прямо перед закрывающим дескриптором </body> ), добавьте
       следующий код.
                                        p
       < s cript  type=" a pplication/j avascri t ; version=l . 8 " >
           function  refreshServerinfo ( )    {
                                       t
           const  req  =  new  XMLHttpReques ( ) ;
               req . addEventListener ( ' loa ' ,   function ( )
                                       d
                   / /  TODO:  внести  эти  данные  в  НТМL-код
                   console . l og ( t his . responseText )  ;
               } )   ;
               req . open ( ' GET ' ,     ' h tt : //localhost : 7 070  ' ,   tru ) ;
                                  p
                                                         e
               req . sen ( ) ;
                      d
           refreshServerinfo ( ) ;
       < / script>
          Этот сценарий осуществляет простой Ajax -запрос. Сначала мы создаем новый
       объект  XMLHttpReques t ,   а  затем  добавляем  обработчик,  который перехватыва­
       ет событие load (он будет запущен, если Аjах-запрос успешно завершится). В нем
       мы пока что только выводим ответ сервера (который находится в свойстве  th s .
                                                                                i
       responseText) на консоль. Затем происходит вызов метода open, который факти­
       чески устанавливает соединение с сервером. Мы определяем, что это НТТР-запрос
       GET. Это такой же тип запроса, который используется в браузере при посещении веб­
       страницы  (есть и другие типы запросов:  POST, DELETE и др.). Далее мы сообщаем
       методу URL сервера. И наконец происходит вызов метода  e nd, который фактически
                                                            s
       выполняет запрос. В этом примере мы явно не посылаем данные на сервер, хотя мог­
       ли бы это сделать.
          Запустив этот пример, вы увидите данные, возвращаемые с сервера и отображае­
       мые на консоли. Наш следующий шаг - поместить эти данные в наш НТМL-код. Мы
       структурировали свой HTML так, чтобы проще было найти любой элемент, у кото­
       рого есть атрибут данных replace, и заменить содержимое этого элемента данными
       из возвращенного объекта. Для этого мы перебираем свойства, которые были воз­
       вращены сервером (с использованием метода Obj e ct . keys), и если есть какие-ни­
       будь элементы с соответствующими атрибутами данных replace, мы заменяем их
       содержимое.
       req . a ddEventListener ( ' loa ' ,  function ( )    {
                               d
           1 1   thi s . responseText  - это  строка ,  содержащая  JSON;  мы  используем
           //  JSON.parse,  чтобы  преобразовать  ее  в  объект
                          N
           const  data  =  JSO . p arse (th s . responseText )  ;
                                    i

       310      Глава 1 8 . JavaScript в браузере
   302   303   304   305   306   307   308   309   310   311   312