Разработка интерактивных учебных материалов во FLASH с использованием метода хранения данных на стороне клиента в клиент-серверных приложениях

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



от пользовательского ввода. И, конечно, там где требуется анимация или ее элементы. Типичный для сегодняшнего дня пример - онлайн игра с ведением таблицы рекордов.

Недостатки данного метода видны невооруженным взглядом, то есть для хранения информации придется быть знакомым с технологией php, также надо устанавливаться сервер. Преимущества же данного способа состоят в том, что файлы могут быть сохранены в отличном формате, нежели в .sol, как у класса Shared Object [12].

В ActionScript имеется мощный инструмент, метод sendAndLoad() класса LoadVars. Метод sendAndLoad(), имеет следующий синтаксис:

sender.sendAndLoad(URL, loader, method);

URL - ссылка, адресующая файл со скриптом.

loader - объект класса LoadVars, в который должны быть загружены данные.

method - HTTP-метод, который должен использоваться для передачи данных.

Работа метода sendAndLoad() состоит из двух этапов. На первом он ведет себя точно так же, как метод send() класса LoadVars, то есть создает на основании доступных для перечисления свойств вызвавшего его объекта строку с парами имя-значение, переводит ее в URL-кодировку и затем отправляет ее вместе с запросом скрипту. На втором этапе метод sendAndLoad() импортирует сгенерированный текстом скрипт подобно тому, как это делает метод load класса LoadVars.

При использовании метода sendAndLoad() отправляющий данные и принимающий ответ объекты класса LoadVars лучше делать различными, даже если повторно этот метод применяться не будет. Дело в том, что код, обрабатывающий сгенерированный серверным скриптом текст, всегда помещается в обработчик события onLoad или события onData принимающего ответ объекта LoadVars. Если этот же объект будет отсылать запрос, то в число отправляемых переменных будет включена созданная на основании свойства onData или onLoad переменная. Действительно, обработчик для событий создается вами, поэтому он не защищен от перечисления. Все же доступные для обхода циклом for-in переменные вызывающего метод sendAndLoad() объекта класса LoadVars переводятся в пары имя-значение и пересылаются серверному скрипту. Наличие же непредусмотренных переменных может сбить работу алгоритма. Чтобы этого не произошло, можно защитить метод onLoad или onData от перечисления при помощи недокументированной функции ASSetPropFlags(), но проще разнести функции отправителя данных и получателя ответа по разным объектам [13].

В отличие от обычных HTML-страниц, где обмен информацией с сервером присходит путем перезагрузки страниц (хотя перегружать можно только часть страницы), flash-приложение ведет себя как независимый клиент, то есть, оно само (не без помощи браузера, естественно) способно передать данные серверу и получить их. При этом данный процесс не затрагивет окружения самого ролика (самой странички). Где это можно использовать? Собственно, там, где нужен обмен данными, но нет особой потребности в поисковой индексации страниц, там где требуется многократная выдача промежуточных данных, различающихся в зависимости от пользовательского ввода. И, конечно, там где требуется анимация или ее элементы. Типичный для сегодняшнего дня пример - онлайновая игрушка с ведением таблицы рекордов. Итак,

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

Решение:

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

Первый шаг - на основании строки создаем объект XML:

var my_str = "blabla";var my_xml:XML = new XML(my_str);

Теперь вновь созданный объект XML несет в себе нашу полезную строковую информацию (несмотря на то, что она не является well-formed XML-документом). Её можно вывести на экран методом toString() объекта XML:

trace (my_xml.toString());

Шаг второй: задаем contentType:_xml.contentType = "text/xml";

Было много дискуссий насчет того, надо или не надо это делать. Я не хочу вдаваться в механизмы работы объекта XML во Flash. Для меня это свойство - гарантия того, что содержимое XML при отправке его на сервер, будет размещено в области RAW POST DATA (сырых, неразобранных POST-данных), откуда мы их сможем легко извлечь в php-скрипте.

Шаг третий: готовим обработчик получения результата. Как правило, нас мало интересует просто отправка данных, мы хотим быть уверены, что они приняты, обработаны и получен результат. Для этого php должен отправить что-то в ответ, а Flash должен его получить. Получать данные от сервера будет опять-таки объект XML. Вообще, это может быть любой XML ролика, в том числе и тот, который отправлял данные. Ему мы назначим обработчик полученного результата. Для простоты он будет трассировать полученные данные:

var receive_xml:XML = new XML();recrive_xml.onLoad = function(success){ if(success){ trace(this.toString()); } else { trace("данные получить не удалось"); }}

Шаг последний: отправляем данные и ждем результат. Для этого воспользуемся методом sendAndLoad(). В качестве параметров он принимает название файла, который планируется загружать и объект, в который будут загружены полученные данные. Поскольку задача стоит в передаче данных в php, имя этого скрипта и будет в качестве файла, а объект приема данных уже готов:

my_xml.sendAndLoad("phpscript.php", receive_xml);

Теперь дело за серверной частью. Мы должны создать Скрипт, который смог бы прочесть отправленные данны