Опубликован: 04.11.2006 | Уровень: специалист | Доступ: платный
Урок 11:

Организация ввода и вывода данных во Flash

< Урок 10 || Урок 11: 12345 || Урок 12 >

Применение объекта loadVars

Объект LoadVars используется при работе с данными в формате URL-строки. С помощью этого объекта можно загружать данные из текстового файла, а также осуществлять обмен (посылать и загружать) данными с серверным скриптом.

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

Создать объект LoadVars во Flash легко. Взгляните на этот пример:

container = new LoadVars();

Этим создается новый объект класса LoadVars с именем container. Для загрузки переменных с URL в объект LoadVars применяется метод load():

container.load("http://www.myDomain.com/myFile.txt");

Совет. В любой момент можно узнать общее число байтов, которые необходимо загрузить, а также число уже загруженных байтов – для этого предназначены методы объекта getBytesTotal() и getBytesLoaded().

После того, как данные загружены в объект LoadVars, для получения доступа к ним следует указать имя объекта, и следом – имя переменной. Предположим, мы загрузили в объект LoadVars с именем myData следующую строку:

name=Jobe&age=25&wife=Kelly

Ссылки на эти переменные будут такими:

myData.name
myData.age
myData.wife

Например:

userAge = myData.age;

Здесь userAge получит значение 25. Точно так же скрипт во Flash может присвоить переменным, находящимся в объекте LoadVars, новые значения:

myData.age = 45;

Таким образом, значения переменных внутри объекта LoadVars можно задать не только путем загрузки из внешнего источника, но также и прямым присвоением с помощью скрипта в фильме.

Совет. При загрузке переменных в объект LoadVars Flash перезаписывает все значения переменных, которые уже существовали в этом объекте и добавляет переменные, которых не было.

Если требуется переслать переменные из объекта LoadVars для обработки скрипту на сервере, применяется метод send(). Синтаксис следующий:

myLoadVarsObject.send("http://www.mydomain.com/process.cfm");

При использовании этого метода серверный скрипт не посылает Flash никакого ответа – переменные обрабатываются на сервере и там остаются.

Метод sendAndLoad() позволяет отправить на сервер для обработки содержимое объекта LoadVars, и при этом загрузить "ответ" сервера в другой объект LoadVars:

myLoadVarsObject.sendAndLoad("http://www.mydomain.com/process.cfm", receivingLoadVarsObject);

В этом случае переменные из myLoadVarsObject отсылаются на указанный URL. Скрипт на сервере обрабатывает данные и посылает результаты в receivingLoadVarsObject. После этого скрипты в фильме могут работать с данными, присланными в последний объект. Если необходимо, чтобы результаты обработки были загружены в тот же самый объект LoadVars, который послал данные на сервер, просто воспользуйтесь методом load().

C помощью метода toString() объекта LoadVars можно создать форматированную URL-строку, содержащую переменные/значения, содержащиеся в объекте.

Объект LoadVars имеет два свойства: contentType и loaded. Свойство contentType (которое можно изменить перед отсылкой переменных) просто дает тип содержания, указанный в HTTP-заголовке загружаемого документа. Свойство loaded возвращает true, если загрузка данных в объект завершена, false – если не завершена, и undefined, если метод load() для этого объекта еще не вызывался.

Для объекта LoadVars доступно только одно событие: onLoad. Это событие можно использовать, например, для вызова функции, как только загрузка данных в объект будет завершена. Данное событие наступает при каждой загрузке данных в объект.

Для того, чтобы по завершении загрузки переменных с определенного URL в объект LoadVars, вызвать функцию, следует:

  1. Описать функцию.
  2. Создать новый объект LoadVars при помощи конструктора new LoadVars().
  3. Указать функцию, которую следует вызвать по завершении загрузки.
  4. Вызвать метод load() объекта LoadVars.

Например:

function myFunction(){
  trace("Данные загружены");
}
container = new LoadVars();
container.onLoad = myFunction;
container.load("http://www.somedomain.com/myFile.asp");

В этом примере функция myFunction() будет вызвана, как только строка данных с указанного URL будет полностью загружена в объект LoadVars с именем container.

Примечание Если вы знакомы с применением метода loadVariables() из Flash 5, вам следует знать, что, хотя этот метод работает и во Flash MX, предпочтительнее все же использовать объекты LoadVars.

В следующем упражнении мы с вами создадим несложную систему голосования, применив при этом объект LoadVars, который будет обмениваться данными (отсылать и получать) в формате URL-строки со страницей ASP. Эта страница содержит серверный скрипт, умеющий читать и записывать данные в базе данных Microsoft Access. Скрипт интерпретирует данные, посланные ASP-странице, и соответствующим образом обновляет значения в базе данных. По запросу объекта LoadVars на загрузку данных с ASP-страницы, скрипт берет данные из различных полей таблицы, формирует из них URL-строку и отсылает ее объекту LoadVars.

Страницу со скриптом ( poll.asp ) и соответствующую базу данных ( poll.mdb ) вы найдете на прилагающемся CD-ROM в папке Lesson11. Для успешного выполнения упражнений этого урока вы должны иметь доступ к серверу Windows, чтобы серверный скрипт на ASP-странице мог быть выполнен. До начала этого упражнения вы должны выгрузить на сервер poll.asp и poll.mdb и запомнить их расположение (адрес URL).

  1. Откройте файл poll1.fla из папки Lesson11/Assets.

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

Если монтажный стол установлен на кадр 1, на экране отображается надпись: "What was the best movie of 2001?" ("Какой фильм был лучшим в 2001 году"). Под этим текстом оставлено свободное пространство, а в нижней части – кнопка Submit (Подтвердить). В пустое пространство мы поместим четыре компонента RadioButton. С их помощью пользователь будет выбирать лучший, по его мнению, фильм 2001 года. После того, как он нажмет кнопку Submit, фильм выполнит скрипт, который пошлет на сервер данные (о том, какой из фильмов выбрал пользователь) и переместит курсор воспроизведения фильма на кадр 3, с меткой waiting, и будет ожидать ответа сервера. По получении ответа (загрузке данных в объект LoadVars ) фильм перейдет к кадру с меткой display. Этот кадр будет содержать скрипт, интерпретирующий данные, полученные с сервера. На основании этих данных будет вычислено процентное соотношение голосов, поданных за каждый из четырех фильмов. Это соотношение будет затем отображено в текстовых полях и графически, в виде диаграммы.


  1. Установите курсор воспроизведения к кадру 1 и выделите кадр в слое Text and Buttons.

В этот слой мы поместим четыре экземпляра компонента RadioButton (между вопросом и кнопкой Submit).

  1. Откройте панель Компоненты (Components). Найдите компонент RadioButton и перетащите на сцену четыре его экземпляра. Расположите их вертикальным столбцом под вопросом на экране.

Итак, вы поместили на сцену четыре экземпляра компонента Radio Button. Выделив один из них и взглянув на инспектор Параметры (Property), вы увидите список свойств данного компонента – все их можно изменять. Первое свойство, Label, – это подпись, отображаемая рядом с кнопкой. Следующее свойство, Initial State, имеет булево значение, определяющее, должна ли эта опция быть изначально включена (выбрана) или выключена. Свойство Group Nameимя группы таких компонентов, связанных между собой. Четыре селективных кнопки, которые мы добавили, будут составлять одну группу; значит, все они должны иметь одно и то же значение свойства Group Name (мы используем для всех четырех стандартное значениеradioGroup ). В каждый момент времени может быть включена (выбрана) только одна селективная кнопка из группы. Кроме того, каждой кнопке назначается связанное значение (ее свойство Data ). Когда одна из кнопок группы выбрана, значение ее свойства Data становится общим значением данных группы. Например, если кнопка из группы выбрана, и ее свойство Data равно 47, значение данных группы также становится равным 47 (этот факт будет очень важен для нашего проекта). После свойства Data в инспекторе Параметры мы видим свойство Label Placement. Оно определяет, с какой стороны от кнопки должна быть расположена подпись – слева или справа. Наконец, свойство Change Handler позволяет задать функцию, которая должна вызываться при нажатии кнопки; оставьте это свойство пустым.


  1. Выделите верхнюю из селективных кнопок и измените его свойство Label на "A Beautiful Mind". Также измените свойство Label для остальных трех кнопок: соответственно, "Lord of the Rings", "Harry Potter" и "American Pie II".

Изменяя свойство Label в инспекторе Параметры, вы увидите, что меняются подписи у экземпляров компонентов на сцене.

Примечание Если этого не происходит, выполните команду меню Управление > Включить просмотр в реальном времени (Control > Enable Live Preview).

< Урок 10 || Урок 11: 12345 || Урок 12 >
Салтанат Бектегенова
Салтанат Бектегенова

Дострочное пересдача экзамена

 

Евгений Стародубцев
Евгений Стародубцев

Вот задание:

7. Открыв панель Действия (Actions) и установив ее в Экспертный режим(Expert Mode), выделите кадр 1 слоя Actions и введите следующий скрипт:

Евгения Дегтяренко
Евгения Дегтяренко
Украина, Запорожье
Анна Елисеева
Анна Елисеева
Россия, Великий Новгород, Ногородский государственный университет имени Ярослава Мудрого, 2003