Интеграция Flash с веб-приложениями > Обмен информацией с удаленными файлами > Использование XML объекта

Использование XML объектов

Вы можете использовать команды ActionScript XML объекта (например, appendChild, removeNode и insertBefore) для упорядочивания XML-данных перед отправкой на сервер и для управления загруженными данными.

Вы можете использовать следующие методы XML-объекта для посылки и загрузки XML-данных на сервер, используя HTTP POST метод:

load загружает XML из сети и размещает его в ActionScript XML объекте.
send отсылает XML объект по указанному URL. Вся возвратившаяся информация помещается в другом окне броузера.
sendAndLoad отсылает XML объект по указанному URL. Вся возвратившаяся информация помещается в ActionScript XML объект.

Например, можно создать брокерскую систему для торговли ценными бумагами, которая хранит всю информацию (имена пользователей, пароли, информация о транзакциях, и т.д.) в базе данных.

Серверный скрипт, который пропускает информацию между Flash и базой данных, читает и записывает данные в XML формате. Можете использовать ActionScript для конвертирования данных собранных во Flash-ролике (например, имя пользователя и пароль) в XML объект, а затем отправлять их на серверный скрипт в качестве XML документа. Так же можете использовать ActionScript для загрузки XML документа, который сервер возвращает в XML объект, используемый в ролике.

Поток и преобразование данных между Flash-роликом, серверным скриптом и базой данных.
 

Проверка подлинности пароля для брокерской системы требует 2 скрипта: функция, определенная в первом кадре, и скрипт, который создает и отсылает объекты XML, нажатием кнопки Submit в форме.

Когда пользователи вводят информацию в текстовые поля в Flash-ролике в переменные username и password, перед отправкой на сервер эти переменные должны быть сконвертированы в XML. Первая секция скрипта загружает переменные в только что созданный XML объект, который называется loginXML. Когда пользователь нажимает кнопку Submit, объект loginXML конвертируется в XML строку и отсылается на сервер.

Следующий скрипт прописывается в кнопку Submit. Для облегчения понимания, в скрипт вставлены комментарии начинающиеся с символов //:

on (release) {
	// A. Конструируем XML документ с элементом LOGIN
	loginXML = new XML();
	loginElement = loginXML.createElement("LOGIN");
	loginElement.attributes.username = username;
	loginElement.attributes.password = password;
	loginXML.appendChild(loginElement);

	// B. Конструируем XML объект для сбора информации полученной от сервера
	loginReplyXML = new XML();
	loginReplyXML.onLoad = onLoginReply;

	// C. Отсылаем элемент LOGIN на сервер,
	//    помещаем ответ в loginReplyXML
	loginXML.sendandLoad("https://www.imexstocks.com/main.cgi",
							loginReplyXML);
}

Первая секция скрипта генерирует следующий XML, когда пользователь нажимает кнопку Submit:

<LOGIN USERNAME="JeanSmith" PASSWORD="VerySecret" />

Сервер получает XML, создает XML ответ и посылает его обратно в ролик. Если пароль верен, то сервер ответит следующим образом:

<LOGINREPLY STATUS="OK" SESSION="rnr6f7vkj2oe14m7jkkycilb" />

Этот XML включает параметр SESSION, который содержит случайно генерируемый ID сессии, используемый во всех последующих соединениях между клиентом и сервером до конца сессии. Если пароль неверный сервер выдает следующее сообщение:

<LOGINREPLY STATUS="FAILED" />

XML узел (XML node) LOGINREPLY должен быть загружен в чистый XML объект в ролике. Следующие строчки создают XML-объект loginreplyXML чтобы получить XML узел:

// B. Конструируем XML объект для сбора информации полученной от сервера
loginReplyXML = new XML();
loginReplyXML.onLoad = onLoginReply;

Вторая часть назначает функцию onLoginReply обработчику loginReplyXML.onLoad.

XML-элемент LOGINREPLY появляется асинхронно, как данные из команды loadVariables и загружается в loginReplyXML объект. Когда данные прибывают, вызывается метод onLoad объекта loginReplyXML. Вы должны определить функцию onLoginReply и назначить ее обработчику loginReplyXML.onLoad, чтобы он мог обработать элемент LOGINREPLY. Функция onLoginReply назначается на фрейм, который содержит кнопку Submit.

Функция onLoginReply вызывается в первом кадре ролика.
 

function onLoginReply() {
	// Получаем первый XML элемент
	var e = this.firstChild;
	// Если первый XML элемент это LOGINREPLY со статусом OK,
	// переходим к экрану "portfolio". В противном случае,
	// оповещаем посетителя, что пароль ему отгадать не удалось
	// и предоставляем ему еще одну попытку .
	// Кстати хотел бы я посмотреть на сайт с запароленным разделом
	// "portfolio" :)
	if (e.nodeName == "LOGINREPLY" && e.attributes.status == "OK") {
// Сохраняем ID сессии для дальнейшего общения с сервером
	sessionID = e.attributes.session;
// переходим к экрану просмотра "portfolio"
		gotoAndStop("portfolioView");
	} else {
		// Опс :) Пароль не угадан! Переходим к метке "loginFailed"
		gotoAndStop("loginFailed");
	}
}

Первая строка этой функции, var e = this.firstChild использует ключевое слово this чтобы обратиться к XML-объекту loginReplyXML, который только что был загружен с сервера. Вы можете использовать this потому, что onLoginReply был вызван как loginReplyXML.onLoad, так что хотя onLoginReply кажется вроде бы простой функцией, он фактически ведет себя как метод loginReplyXML.

Чтобы послать username и password как XML на сервер и загрузить XML ответ назад в ролик, можно использовать метод sendAndLoad, например как в этом примере:

	// C. Отсылаем элемент LOGIN на сервер,
	//    помещаем ответ в loginReplyXML
	loginXML.sendandLoad("https://www.imexstocks.com/main.cgi", loginReplyXML);

Дополнительная информация о методах XML имеется в словаре ActionScript.

ПРИМЕЧАНИЕ: Эти примеры очень просты, мы не даем никаких гарантий об уровне защиты, который они предоставляют. Если вы создаете охранную систему, сначала удостоверьтесь что у вас хороший уровень знаний о сетевой безопасности прежде чем создавать её!