ИТ лабы
.pdf40
использование динамического изменения содержания страницы;
использование DOM (Document Object Model – объектная модель документов), (через код JavaScript) для работы и со структурой HTML документа, и (в некоторых случаях) с XML, полученным от сервера;
использование в качестве формата передачи данных XML или JSON
Ajax помещает технологию JavaScript и объект XMLHttpRequest между Web-формой и сервером. Когда пользователи заполняют формы, данные передаются в некоторый JavaScript-код, в объект Объкт XMLHttpReques, а не прямо на сервер.
Затем объект XMLHttpReques передает запрос на сервер. При этом запрос передается в фоновом режиме, не прерывая работу пользователя с формой. Кроме того запрос передается асинхронно, то есть JavaScript-код (и пользователь) не ожидают ответа сервера, а продолжается его выполнение. Пользователи могут продолжать вводить данные, прокручивать страницу и работать с приложением.
Затем сервер передает данные обратно в JavaScript-код, выполняемый в Web-форме, в объект XMLHttpReques, производит обработку полученных данных (средствами JavaScript-кода). При этом поля формы могут обновляться "на лету", то есть элементы формы могут получать новые данные без подтверждения их обновления форм пользователем. То есть объект XMLHttpRequest может общаться с сервером без вмешательства пользователя.
Таким образом, технология Ajax подразумевает выполнение следующих действий:
извлечение данных формы посредством JavaScript-кода, на основе DOM;
передачу данных на сервер средствами объекта XMLHttpRequest;
получение данных с сервера средствами объекта XMLHttpRequest;
анализ полученных данных сервера;
41
изменение значения в форме (так же на основе DOM) в асинхронном режиме, то есть, не прерывая выполнения других сценариев. При этом может производиться не только установка значений полей, но даже замена изображений.
XMLHttpRequest является центральным для Ajaxприложений
Создается данный объект, как и другие объекты JavaScript, с помощью соответствующего конструктора объекта:
xmlHttp = new XMLHttpRequest();
Однако в браузерах Microsoft объект XMLHttpRequest рассматривается как один из вариантов объектов ActiveX, поэтому для его создания используется соответствующий конструктор:
xmlHttp = new ActiveXObject(“ТипОбъектаActiveX“);
В качестве значения параметра “ТипОбъеткаActiveX“ для браузеров версии позднее 5 указывается "Msxml2.XMLHTTP", для более ранних версий браузеров указывается "Microsoft.XMLHTTP".
Для того чтобы любые варианты браузеров могли создать объект, можно использовать универсальный вариант кода:
var xmlHttp = false; /*@cc_on @*/
/*@if (@_jscript_version >= 5) try
{xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {try
{xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e2) {xmlHttp = false;
}
}
@end @*/
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') { xmlHttp = new XMLHttpRequest();
}
42
где – /*@ @*/ директивы компилятору JavaScript.
Содержание основных действий технологии Ajax
Извлечение данных формы посредством JavaScript-кода, на основе DOM
Объектная модель документа (DOM) подразумевает обращение к значению элементов через иерархию объектов, образующих документ. Например:
document.id1.id11.value= “111”; var dd = document.id1.id11.value;
где document – это объект, соответствующий текущему документу HTML в целом;
id1 – идентификатор, то есть значение атрибута ID или Name, элемента, входящего в документ непосредственно (непосредственно дочернего текущему документу, вне других элементов);
id11 – значение атрибута Name или ID элемента, входящего в элемент id1(непосредственно дочернего id1);
value – ссылка на значение элемента ID11.
Объектная модель кроме того подразумевает использование функций доступа к значению элементов по их идентификатору: var phone = document.getElementById("phone").value;
Передача данных на сервер средствами объекта XMLHttpRequest
Для передачи данных на сервер необходимо:
создать URL для подключения;
открыть соединение с сервером;
установить функцию, которая выполнится после получения ответа от сервера;
передать запрос.
Создание URL для подключения.
При использовании метода передачи GET (в ajax обычно используется данный метод) URL подключение создается в виде значение текстовой переменной, содержащей адрес документа
43
обработчика и предаваемые параметры. Передаваемые параметры отделяются от адреса знаком “?”
var url = ž/test/getZipCode.php?fam=¡ + escape(fam) + ž&phone=¡ + escape(phone);
где idfam , idphone – идентификаторы некоторых элементов формы;
fam, phone – значение переменных, которое передается как значение элементов.
Метод escape() возвращает строку (в формате Unicode). Все пробелы, пунктуация и любые не-ASCII символы в ней закодированы и выглядят как %xx, где xx эквивалентно шестнадцатиричному числу, обозначающему символ. Например, пробелы будут возвращены как µ%20¶. Символы, числовые значения которых больше 255 будут представлены в формате %uxxxx. Использование данного метода позволяет обеспечить передачу всех возможных символов.
Соединение с сервером
Соединение с сервером открывается с помощью операции open объекта XMLHttpRequest
open(žМетодПередачи¡, url, ПереключательАсинхронногоРежима);
где МетодПередачи – метод передачи (GET или POST), обычно используется метод GET;
url – сформированный ранее url для подключения, представленный в виде значения текстовой переменной или константы;
ПереключательАсинхронногоРежима – логический параметр (возможные значения true или false), при значении true асинхронный режим включён. Обычно используется включённый асинхронный режим.
Установка функции, которая выполнится после получения ответа от сервера
Функция, выполняемая после получения ответа от сервера, устанавливается в виде значения соответствующего свойства onreadystatechange объекта XMLHttpRequest. Обычно на данную функцию возлагаются задачи, связанные с обработкой полученных данных от сервера и изменением значений элементов формы.
44
Пусть в рассматриваемом примере эти задачи будет выполнять функция updatePage:
xmlHttp.onreadystatechange = updatePage; Пример содержания данной функции. function updatePage() {
if (xmlHttp.readyState == 4) {
var response = xmlHttp.responseText; document.getElementById("famPhone").value = response;
}
}
В данном случае функция выполняет установку значения элемента с атрибутом id="famPhone". Значение берётся из свойства объекта XMLHttpRequest – responseText в примере – xmlHttp.responseText. Данное свойство содержит данные, переданные из документа обработчика (в документе обработчике выведено на печать командой echo или write).
Свойство readyState объекта XMLHttpRequest указывает на то, в какой степени выполнен запрос на сервер. При значении данного свойства равном 4 – запрос выполнен.
Свойство responseText содержит данные, полученные от сервера. Эти данные формируются как результат операторов вывода на печать (echo, print) в файле-обработчике формы.
Передача запроса
Запрос передаётся с помощью метода send объекта XMLHttpRequest:
send(ПередаваемыеДанные)
где ПередаваемыеДанные – передаваемые данные на сервер. В том случае, когда все данные включены в описание URL подключения, то их передача в методе send не требуется. В данном случае, качестве передаваемых данных указывается значение null.
Например,
xmlHttp.send(null);
Действия, связанные с реализации технологии ajax, оформляются в виде функции, в данном случае функция callServer().
function callServer() {
// Получить phone и fam из web-формы
var phone = document.getElementById("phone").value; var fam = document.getElementById("fam").value;
45
//Продолжать только если есть значения обоих полей if ((phone == null) || (phone == "")) return;
if ((fam == null) || (fam == "")) return;
//Создать URL для подключения
var url = "/test/getZipCode.php?fam=" + escape(fam) + "&phone=" + escape(phone);
//Открыть соединение с сервером xmlHttp.open("GET", url, true);
//Установить функцию для сервера, которая выполнится после его ответа
xmlHttp.onreadystatechange = updatePage;
//SПередать запрос
xmlHttp.send(null);
}
Данная функция устанавливается на события управляющих элементов формы onChange.
<form >
<label for="fam"> фамилия </label><input type="text" id="fam" name="fam" onChange="callServer()"><br>
<label for="phone"> телефон </label><input type="text" id="phone" name="phone" onChange="callServer()"> <br>
<label for="famPhone"> фамилия+телефон</label><input type="text" id="famPhone"> <br>
<button type="submite"></button> </form>
3.ПОРЯДОК ВЫПОЛНЕНИЯ
1.Создать форму HTML в соответствии с заданием.
2.Создать документ обработчик PHP, обеспечивающий выполнение требуемых действий.
3.Создать программный код в документе HTML, реализующий элементы технологии AJAX.
46
4. ЗАДАНИЕ
Заданием для работы является создание документа HTML, в который включена форма, и документаобработчика PHP. совместно реализующих элементы технологии AJAX. Индивидуальными являются задания, аналогичные работе № 5, но требуемые функции должны реализовываться на основе технологии AJAX. Результат должен выводиться в текстовое поле, расположенное ниже основных управляющих элементов.
5.КОНТРОЛЬНЫЕ ВОПРОСЫ
1.Что собой представляет технология AJAX?
2.Как согласно технологии AJAX осуществляется обмен данными между пользовательской страницей и сервером?
3.Для чего служит объект XMLHttpReques, его основные функции, как он создается?
4.Какие действия должны выполняться в web-приложении, работающем по технологии AJAX?
5.Как извлекаются данные формы на основе модели DOM?
6.Какие действия выполняются при передаче данных серверу, при работе приложения на основе технологии AJAX?
7.Как устанавливаются данные, полученные от сервера, на элементы формы?
СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ
1.http://html.manual.ru/
2.http://www.machaon.ru/digest/rusinter.HTML.html
3.http://digkiller.narod.ru/webmaster
4.http://postroika.ru
5.Меженный, О. А. Microsoft Office 2007. Краткое руководство / О. А. Меженный. – М.: Диалектика, 2008. – 384 с., с ил.
47
|
|
|
|
|
ПРИЛОЖЕНИЕ |
|
|
Основные элементы HTML |
|
Таблица 1 |
|||
|
|
|
|
|
|
|
Тег |
Назначение |
Ти |
Атрибуты |
Примечание |
||
|
|
|
п |
|
|
|
<P>… </P> |
Определяет |
Бл |
id, class, style, ti- |
не может содер- |
||
|
абзац текста |
|
tle, lang, dir, со- |
жать других блоч- |
||
|
|
|
|
бытия |
ных элементов |
|
<BR> |
Разрыв строки |
- |
id, class, style, ti- |
|
|
|
|
|
|
|
tle |
|
|
<PRE>… |
Предвари- |
Бл |
id, class, style, ti- |
может |
содержать |
|
</PRE> |
тельно |
от- |
|
tle, lang, dir, со- |
IMG, |
OBJECT, |
|
форматиро- |
|
бытия |
BIG, SMALL, SUB |
||
|
ванный текст |
|
|
или SUP |
||
|
Фразовые эле- |
|
|
|
|
|
|
менты |
|
|
|
|
|
<Hn>… |
Заголовки |
Бл |
id, class, style, ti- |
|
|
|
</Hn> |
|
|
|
tle, lang, dir, со- |
|
|
|
|
|
|
бытия |
|
|
<EM> |
Выделение |
T |
id, class, style, ti- |
По |
умолчанию |
|
…</EM> |
текста: |
|
|
tle, lang, dir, со- |
курсивным шриф- |
|
|
|
|
|
бытия |
том |
|
<STRONG> |
Сильное |
вы- |
T |
id, class, style, ti- |
По умолчанию по- |
|
</STRONG> |
деление |
|
|
tle, lang, dir, со- |
лужирный шрифт |
|
|
|
|
|
бытия |
|
|
<CITE> |
Ссылка: |
|
Т |
id, class, style, ti- |
По |
умолчанию |
…</CITE> |
|
|
|
tle, lang, dir, со- |
курсивным шриф- |
|
|
|
|
|
бытия |
том |
|
<DFN>… |
Определение |
Т |
id, class, style, ti- |
По |
умолчанию |
|
</DFN> |
термина |
|
|
tle, lang, dir, со- |
курсивным шриф- |
|
|
|
|
|
бытия |
том |
|
<CODE>… |
Фрагмент |
Т |
id, class, style, ti- |
По умолчанию те- |
||
</CODE> |
программного |
|
tle, lang, dir, со- |
летайпным шриф- |
||
|
кода |
|
|
бытия |
том |
|
<SAMP> |
Пример выво- |
T |
id, class, style, ti- |
По умолчанию те- |
||
…</SAMP> |
да результатов |
|
tle, lang, dir, со- |
летайпным шриф- |
||
|
|
|
|
бытия |
том |
|
<KBD>… |
Пример |
ввода |
T |
id, class, style, ti- |
По умолчанию те- |
|
</KBD> |
данных |
|
|
tle, lang, dir, со- |
летайпным шриф- |
|
|
|
|
|
бытия |
том |
|
|
|
|
|
|
|
|
48
Продолжение табл. 1
<VAR>… |
Переменные и |
Т |
id, class, style, ti- |
Умолчанию |
кур- |
||||
</VAR> |
|
аргументы |
|
|
tle, lang, dir, со- |
сивным шрифтом |
|||
|
|
|
|
|
бытия |
|
|
|
|
|
|
|
|
|
|
|
|
||
<ABBR>… |
Аббревиатура |
Т |
id, class, style, ti- |
|
|
|
|
||
</ABBR> |
|
|
|
tle, lang, dir, со- |
|
|
|
|
|
|
|
|
|
|
бытия |
|
|
|
|
|
|
|
|
|
|
|
|
||
<ACRONY |
Аббревиатура, |
Т |
id, class, style, ti- |
|
|
|
|
||
M>…</ACR |
произносимая |
|
tle, lang, dir, со- |
|
|
|
|
||
ONYM> |
единое слово, |
|
бытия |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
Задание |
|
|
|
|
|
|
|
|
|
шрифта |
|
|
|
|
|
|
|
<TT> |
|
Телетайпный |
Т |
id, class, style, ti- |
* фразовые |
|
|||
…</TT> |
шрифт |
|
|
tle, lang, dir, со- |
|
|
|
|
|
|
|
|
|
|
бытия |
|
|
|
|
|
|
|
|
|
|
|
|
||
<I> |
|
Курсивный |
|
Т |
id, class, style, ti- |
* фразовые |
|
||
…</I> |
|
шрифт: |
|
|
tle, lang, dir, со- |
|
|
|
|
|
|
|
|
|
бытия |
|
|
|
|
|
|
|
|
|
|
|
|||
<B>… |
</B> |
Полужирный |
Т |
id, class, style, ti- |
* фразовые |
|
|||
|
|
шрифт: |
|
|
tle, lang, dir, со- |
|
|
|
|
|
|
|
|
|
бытия |
|
|
|
|
|
|
|
|
|
|
|
|||
<BIG>… |
Крупный |
|
Т |
id, class, style, ti- |
* заголовки |
|
|||
</BIG> |
|
шрифт |
|
|
tle, lang, dir, со- |
|
|
|
|
|
|
|
|
|
бытия |
|
|
|
|
<SMALL>… |
Мелкий |
|
Т |
id, class, style, ti- |
|
|
|
|
|
</SMALL> |
шрифт: |
|
|
tle, lang, dir, со- |
|
|
|
|
|
|
|
|
|
|
бытия |
|
|
|
|
<SUP>… |
Верхние |
и |
Т |
id, class, style, ti- |
|
|
|
|
|
</SUP> |
и |
нижние |
ин- |
|
tle, lang, dir, со- |
|
|
|
|
<SUB>…</S |
дексы |
|
|
бытия |
|
|
|
|
|
UB> |
|
|
|
|
|
|
|
|
|
|
|
Цитаты |
|
|
|
|
|
|
|
<BLOCKQU |
Блочные |
ци- |
Бл |
id, class, style, ti- |
Маркировка |
блоч- |
|||
OTE>…</BL |
таты |
|
|
tle, lang, dir, со- |
ных |
цитат, |
со- |
||
OCKQUOTE |
|
|
|
бытия, |
стоящих |
из |
не- |
||
> |
|
|
|
|
cite=URI |
скольких строк |
|||
<Q>…</Q> |
Краткие цита- |
Т |
id, class, style, ti- |
Для |
маркировки |
||||
|
|
ты |
|
|
tle, lang, dir, со- |
кратких |
цитат, со- |
||
|
|
|
|
|
бытия, |
стоящих из одной |
|||
|
|
|
|
|
cite=URI |
фразы (курсив) |
49
Продолжение табл. 1
|
Маркировка |
|
|
|
|
|
|
изменений |
в |
|
|
|
|
|
документе |
|
|
|
|
|
<INS> |
Вставка |
тек- |
|
id, class, style, ti- |
отображается |
под- |
…</INS> |
ста |
|
|
tle, lang, dir, со- |
черкнутым |
тек- |
|
|
|
|
бытия, |
стом |
|
|
|
|
|
cite=URI |
|
|
<DEL>…</D |
Удаление тек- |
|
id, class, style, ti- |
отображается |
пе- |
|
EL> |
ста |
|
|
tle, lang, dir, со- |
речеркну- |
|
|
|
|
|
бытия, |
тым |
тек- |
|
|
|
|
cite=URI |
стом |
|
|
Списки |
|
|
|
|
|
<UL>…</UL |
Маркирован- |
Б |
id, class, style, ti- |
|
|
|
> |
ные списки |
Л |
tle, lang, dir, со- |
|
|
|
|
|
|
|
бытия, |
|
|
<OL>…</OL |
Нумерован- |
Бл |
id, class, style, ti- |
|
|
|
> |
ные списки |
|
tle, lang, dir, со- |
|
|
|
|
|
|
|
бытия, |
|
|
<LI>…</LI> |
Элементы |
|
Бл |
id, class, style, ti- |
|
|
|
списков |
|
|
tle, lang, dir, со- |
|
|
|
|
|
|
бытия, |
|
|
<DL>…</DL |
Списки опре- |
Б |
id, class, style, ti- |
|
|
|
> |
делений |
|
Л |
tle, lang, dir, со- |
|
|
|
|
|
|
бытия, |
|
|
|
|
|
|
|
|
|
<DT>…</DT |
Имя опреде- |
Бл |
id, class, style, ti- |
|
|
|
> |
ляемого |
тер- |
|
tle, lang, dir, со- |
|
|
|
мина |
|
|
бытия, |
|
|
|
|
|
|
|
|
|
<DD>…</D |
Определение |
Бл |
id, class, style, ti- |
|
|
|
D> |
этого термина |
|
tle, lang, dir, со- |
|
|
|
|
|
|
|
бытия, |
|
|