KnigaRead.com/

В. Дронов - Macromedia Flash Professional 8. Графика и анимация

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн В. Дронов, "Macromedia Flash Professional 8. Графика и анимация" бесплатно, без регистрации.
Перейти на страницу:

В результате Flash отправит Web-cepeepy следующий адрес (сами данные в нем выделены полужирным шрифтом):

http://www.site.ru/bin/program.exe?name1=Ivan&&name2=Ivanov&password=vanyusha

Как видим, пересылаемые способом GET данные объединяются в пары "переменная" = "значение", помещаются в самый конец интернет-адреса и отделяются от него вопросительным знаком. При этом одна пара от другой отделяется знаком "коммерческое и" (&). Все это достаточно просто и наглядно.

Получив этот запрос, Web-cepeep первым делом отделит отправленные данные от собственно интернет-адреса серверной программы (в нашем случае это program.exe). Далее он запустит саму эту программу (если она еще не запущена) и передаст ей данные.

Второй способ носит название POST. Данные с его помощью передаются также парами "переменная" = "значение", но уже не в виде части интернет-адреса, а в виде так называемых дополнительных данных запроса. Опять же, Web-сервер выделит эти данные и передаст их серверной программе.

Чтобы реализовать способ POST, нам нужно будет передать соответствующему действию или методу с последним параметром строку "POST":

_root.loadMovie("http://www.site.ru/bin/getswf.exe", "POST");

Это выражение выполнит отправку данных способом post. В результате его выполнения серверная программа вернет файл Shockwave/Flash, содержащий клип, который заменит в окне проигрывателя Flash основной фильм.

Все эти методы и действия хороши, пока нам не понадобится получить от серверной программы результат обработки переданных нами данных. В этом случае нам придется воспользоваться другими действиями и методами, которые будут описаны ниже.

Получение данных от серверной программы

Самый простой способ передать серверной программе данные и сразу же получить от нее результат их обработки — использовать действие loadVariabies или одноименный метод объекта movieClip. Это действие (метод) отправляет данные серверной программе и сразу же начинает ожидать получения результата. В принципе, с его помощью мы можем заставить приложение Flash загружать данные из текстового файла, находящегося на сервере или даже на диске нашего собственного компьютера.

Нужно сразу сказать, что серверная программа должна отправить данные, полученные в результате обработки, в виде строки, содержащей набор пар "переменная" = "значение", отделенных друг от друга знаком & (так же кодируются данные, передаваемые способом GET). Только тогда действие (метод) loadVariabies сможет правильно их обработать.

Получив от серверной программы данные, действие (метод) loadVariabies создает в указанном нами клипе соответствующие переменные, если они еще не созданы, и присваивает им принятые значения.

Формат вызова действия loadVariabies таков:

loadVariabies("Интернет-адрес серверной программы",

Путь клипа, получающего данные"[, "GET|POST"]);

С первым параметром передается интернет-адрес серверной программы, которая должна получить данные и отправить результат, или текстового файла, содержащего их. Со вторым параметром передается путь клипа, который должен принять и обработать эти данные. Третий, необязательный, параметр используется для задания способа передачи отправляемых данных.

Примеры использования действия loadVariabies:

loadVariabies("http://site.ru/bin/program.pi", _root.dataHandler,"POST");

loadVariabies("data.txt", _root.dataHandler);

Оба эти выражения загружают полученные данные в клип dataHandler. Но только первое выражение получает их от серверной программы, передав ей способом POST значения переменных уровня клипа, а второе загружает их из текстового файла.

Метод loadVariabies вызывается почти так же:

<Клип, получаюпщй данные>.loadvariabies("Интернет-адрес серверной программы" [, "GET | POST"]);

Например:

_root.dataHandler.loadvariabies("http://site.ru/bin/program.pi", "POST");

Для загрузки данных в перекрывающийся фильм используется действие loadVariablesNum. Вот формат его вызова

loadvariabies("Интернет-адрес серверной программы",

"Уровень перекрытия фильма, принимающего данные"[, "GET|POST"]);

Комментарии, как говорится, излишни.

Вроде бы, все просто — выполняем действие или метод, получаем данные и обрабатываем их в своем приложении. Просто, да не совсем. Давайте рассмотрим небольшой сценарий, принимающий от серверной программы значение переменной frameNumber:

_root.loadVariables("http://site.ru/bin/program.exe");

_root.gotoAndStop(frameNumber);

Будет ли работать этот код? Может, будет, а может, и нет. И вот почему…

Когда мы даем приложению Flash команду получить данные от серверной программы или из текстового файла, мы не можем быть уверены в том, что эти данные будут получены сию же секунду. Более того, вообще нельзя быть уверенным, что Flash сможет получить их в течение какого-то строго определенного промежутка времени. Это может произойти как через долю секунды, так и через час (например, если произошел обрыв связи или если серверная программа перегружена другими запросами). И когда именно Flash получит результат, мы предугадать не можем.

Но если мы не можем предсказать время, в течение которого приложение получит внешние данные, то мы можем отследить сам момент их получения. Для этого достаточно обработать событие data объекта movieClip, возникающее после получения клипом всех (до самой последней переменной) данных.

С учетом сказанного перепишем приведенный выше сценарий:

_root.onData = function() {

_root.gotoAndStop(frameNumber);

}

_root.loadVariables("http://site.ru/bin/program.exe");

Вот теперь он будет работать.

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

Существует другой способ получения данных от серверной программы — использование экземпляров объекта LoadVars. Этот объект предоставляет по сравнению с действиями loadVariable и loadVariableNum возможность несколько более строгого контроля над процессом обмена данными, хотя выполняет те же самые функции.

Прежде всего, нам нужно создать экземпляр объекта LoadVars:

myLoadVars = new LoadVars();

Затем мы просто создаем для него новые свойства, чьи имена совпадают с именами переменных, которые нужно передать серверной программе.

И разумеется, присваиваем этим свойствам нужные значения:

myLoadVars.namel = "Ivan";

myLoadVars.name2 = "Ivanov";

myLoadVars.password = "vanyusha";

Чтобы отправить данные серверной программе, используется метод send. Формат его вызова таков:

<Экземпляр объекта LoadVars>.send("<Интернет-адрес серверной программы>"[, "<Цель>", "GET|POST"]);

С первым параметром передается интернет-адрес серверной программы, которой посылаются эти данные. Со вторым параметром может быть передана цель, указывающая, куда будет выведен результат обработки этих данных (как правило, это Web-страница, сгенерированная серверным приложением). Третий необязательный параметр определяет способ отправки данных; если он не указан, выбирается способ POST.

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

myLoadVars.send("http://site.ru/bin/program.exe", "_blank", "GET");

Для приема данных от серверной программы используется метод load. С единственным параметром этого метода передается интернет-адрес этой серверной программы или же путь к текстовому файлу, содержащему нужные данные. Что касается данных, то они, опять же, должны быть представлены в виде текстовой строки, состоящей из пар "переменная" — "значение", отделенных друг от друга знаком &.

Вот пример использования метода load:

myLoadVars.load("http://site.ru/bin/program.exe");

Метод sendAndLoad одновременно отправляет серверной программе данные и получает от нее результат их обработки. Формат вызова этого метода:

<Экземпляр объекта LoadVars, отправляющий данные>. sendAndLoad ("<Интернет-адрес серверной прогрраммы>",

<Экземпляр объекта LoadVars, принимающий данные> [, "GET | POST"]);

Этот метод вызывается для того экземпляра объекта LoadVars, который должен отправить данные. С первым параметром передается интернет-адрес серверной программы, которая должна их получить, со вторым — ссылка на экземпляр объекта LoadVars, который получит результат. Третий параметр определяет способ отправки данных; если он не указан, выбирается способ POST.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*