Опубликован: 23.12.2005 | Уровень: специалист | Доступ: платный | ВУЗ: Московский физико-технический институт
Лекция 14:

Работа флэш-программ в Internet

Рекомендуемый способ загрузки переменных

Только что мы говорили о возможности загружать с сервера или из файлов переменные. Например, вы можете сделать ini-файл и задавать в нем, размер шрифта или язык. Правда, чтобы отследить, что загрузка переменных закончилась, нам пришлось использовать событие onData класса MovieClip (и, напомним, клип должен был быть встроен в общее дерево клипов). Но нет ли какого-нибудь способа загрузить переменные в какой-нибудь "легкий" объект, который мы просто создаем при помощи new и больше ни о чем не заботимся? Оказывается, такой способ есть.

Начиная с Flash версии 6 существует объект LoadVars, который позволяет загрузить переменные, используя, URL (опять же, это может быть относительный путь к лежащему "рядом" файлу или HTTP-запрос). Заодно этот объект позволяет более удобным способом отследить, что загрузка переменных произошла.

Простейшая схема использования LoadVars такая:

  1. создать объект LoadVars ;
  2. определить и записать в поле onLoad созданного вами объекта callback -функцию, вызываемую после окончания загрузки переменных ; все переменные будут доступны как поля объекта LoadVars, то есть через ссылку this ;
  3. вызвать метод load объекту LoadVars для инициирования загрузки переменных.

Приведем пример использования LoadVars, в котором из файла " settings.ini " загружаются имя шрифта и текущий используемый язык.

var myLoadVars = new LoadVars(); 		//создаем объект LoadVars
myLoadVars.onLoad = function () { 	//определяем callback-метод
globalStyleFormat.face = this.font; 	//устанавливаем шрифт
globalStyleFormat.applyChanges();
_global.localizer.setLocale (this.language); //устанавливаем язык
		// предполагается, что объект localizer вы уже описали 
		// где-то в другом месте
}
myLoadVars.load("settings.ini");

В этом примере мы использовали метод load. Это значит, что никакие переменные на сервер не посылались. В том случае, когда их посылать не нужно, этот метод (имеющий всего один аргумент - URL, откуда загружаются переменные ) и впрямь является оптимальным. Если же надо послать переменные на сервер, используйте метод sendAndLoad. Этот метод имеет следующий синтаксис:

<LoadVars>.sendAndLoad(url, targetObject [,method]);

Здесь targetObject - это ссылка на объект типа LoadVars, в который следует загрузить переменные. На сервер же будут посланы, как обычно, переменные того объекта, для которого вызвана функция. Еще раз обратим ваше внимание, что targetObject - обычная ссылка, а не строковый путь (который все равно работает только для клипов). Все-таки LoadVars - это довольно современный способ работы с переменными, он появился (в отличие от старых глобальных функций loadVariables и пр.) только во Флэш МХ. Наконец, третий аргумент, как обычно, описывает метод, которым следует слать переменные. Если метод не указывать, то переменные все равно посылаются - ведь мы явным образом скомандовали их слать. А вот метод посылки переменных по умолчанию - это, как ни странно, POST. Впрочем, правило "оптимизации метода" работает и здесь: если в объекте нет ни одной переменной, которую можно было бы послать, то на сервер уходит запрос типа GET.

Наконец, в классе LoadVars есть еще метод, который аналогичен функции getURL. Это метод send. Вот его описание:

<LoadVars>.send(url, target [, method]);

Здесь, в отличие от метода sendAndLoad, второй аргумент target - это не ссылка, а строка, и значение этого аргумента совсем другое. Данная строка представляет собой имя окна или фрейма браузера, в который нужно загрузить веб-страницу (или информацию другого типа), которую пришлет сервер. Если это имя неизвестно серверу, он открывает новое окно (можно также использовать предопределенные имена _self, _top, _parent и _blank, описанные в параграфе, посвященном функции getURL ). Несмотря на то, что написано в онлайн-документации Флэш МХ, данный аргумент не является необязательным. Если его опустить (или заменить на null ), сервер вовсе не получает запроса, хотя сам метод send и возвращает при этом true.

Третий аргумент, как обычно, - это метод посылки переменных. Методом по умолчанию является POST, но правило "оптимизации метода" действует и здесь - если нечего слать, то будет применен метод GET.

Интересно, что данный метод, как и функция getURL, имеет забавную особенность: при тестировании во встроенном в интегрированную среду Флэш МХ флэш-плеере, запрос всегда посылается методом GET, какой бы метод мы ни указали. Но из браузера все работает правильно.

И, кстати, обратим внимание на то, что в отличие от рассмотренных ранее методов, которые что-либо шлют на сервер или получают с него, методы LoadVars возвращают булевский результат вызова. Этот результат может быть равен false например в том случае, когда аргумент targetObject метода sendAndLoad не указывает на объект типа LoadVars (тогда и на сервер ничего не посылается).

алексеи федорович
алексеи федорович
Беларусь, рогачёв
Тамара Ионова
Тамара Ионова
Россия, Нижний Новгород, НГПУ, 2009