AJAX ТЕХНОЛОГИЯ

Титульная > Общее описание > Подпрограммы


_

Чтение данных из XML документа

Пусть serveraddressreceive содержит URL папки с XML-документами на сервере. Рассмотрим применение объекта XMLHTTPRequest для асинхронных запросов от клиента к серверу на стороне браузера на примере простого AJAX-приложения, читающего показания термометра. Сформируем для хранения технической информации о температуре, снятой с датчика, файл в XML формате. Пусть password – это имя этого файла. Корневой тэг назовем root. Информацию (температуру) – поместим между тэгами <data>27.1656</data>.

Файл password.xml

<?xml version="1.0" encoding="UTF-8"?>
<root><data>27.16</data></root>

В текст основной программы на языке Javascript создадим глобальную переменную receiveData для читаемой информации (помечаемую тэгом <data>) и флаг прочтения receiveF.

Содержимое ajax.html c подпрограммой чтения ajaxRead(password) имеет вид:

<script language='JavaScript'>
     receiveData=0; receiveF=0;

     function ajaxRead(password){
       receiveF=0; var xmlObj = null;
       if(window.XMLHttpRequest){
         xmlObj = new XMLHttpRequest();
       }else if(window.ActiveXObject){
         xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
       } else {
       return;
       }
       xmlObj.onreadystatechange = function(){
         if(xmlObj.readyState == 4){
         receiveData=eval(xmlObj.responseXML.getElementsByTagName('data')[0].firstChild.data);
         receiveF=1;
         }
       }
       xmlObj.open ('GET',serveraddressreceive+password+'.xml',false);
       xmlObj.send ('');
     }
</script>

Здесь XMLHTTPRequest.open("method", "URL", async, "uname", "pswd") – создает запрос к серверу, где method – тип запроса GET, URL – URL запроса, async – если True, то будет использоваться асинхронный запрос, то есть выполнение скрипта продолжится после отправки запроса. В противном случае скрипт будет ожидать ответа от сервера.

XMLHTTPRequest.onreadystatechange – обработчик событий срабатывающий на каждое изменение состояния объекта. Состояния объекта могут быть следующими: 0 - до того как запрос отправлен (uninitialized), 1 - объект инициализирован (loading), 2 - получен ответ от сервера (loaded), 3 - соединение с сервером активно (interactive), 4 - объект завершил работу (complete).

XMLHTTPRequest.responseText – возвращает полученные от сервера данные в виде строки. XMLHTTPRequest.responseXML – если ответ сервера пришел в виде правильного XML, возвращает XML DOM объект. XMLHTTPRequest.status – возвращает статус HTTP-ответа в виде числа. Например, 404 если запрашиваемая страница не была найдена на сервере. XMLHTTPRequest.send("content") – отправляет запрос на сервер. Значением content могут быть данные для POST-запроса или пустая строка.

В случае передачи векторной информации отделим данные между собой запятыми

<?xml version="1.0" encoding="UTF-8"?>
<root><data>27.16, 25.54, 23.54</data></root>

Процедура чтения несколько усложнится (при записи вектора нет такого сорта различий).

<script language='JavaScript'>
     receiveData=0; receiveF=0;

     function ajaxRead(password){
     receiveF=0; var xmlObj = null; var strajax=''; var i=0;
     if(window.XMLHttpRequest){
       xmlObj = new XMLHttpRequest();
     } else if(window.ActiveXObject){
       xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
     } else {
       return;
     }
     xmlObj.onreadystatechange = function(){
     if(xmlObj.readyState == 4){
       strajax=xmlObj.responseXML.getElementsByTagName('data')[0].firstChild.data;
       i=strajax.indexOf(","); if (i<0) { receiveData=parseFloat(strajax) } else {
         strajax=strajax.split(','); receiveData=new Array();
         for (i=0; i<strajax.length; i++) receiveData[i]=parseFloat(strajax[i]); };
       receiveF=1;
       }
     }
     xmlObj.open ('GET',serveraddressreceive+password+'.xml',false);
     xmlObj.send ('');
     }
</script>

artspb.com   

 


 

_