Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Передача данных флэшу (http://www.flasher.ru/forum/showthread.php?t=105243)

Denisator 11.12.2007 12:59

Передача данных флэшу
 
У меня есть ролик который берёт данные из хтмл с помощью такой конструкции:

Код:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="008" height="550" id="map" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="map2.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<param name=flashvars value="tip1=квартал&kvar1=квартал№1&tip2=квартал&kvar2=квартал№2&tip3=квартал&kvar3=квартал№3&tip4=квартал&kvar4=квартал№4&tip5=квартал&kvar5=квартал№5&tip6">

<embed src="map2.swf"
flashvars="tip1=квартал&kvar1=квартал№1&tip2=квартал&kvar2=квартал№2&tip3=квартал&kvar3=квартал№3&tip4=квартал&kvar4=квартал№4&tip5=квартал&kvar5=квартал№5&tip6"
quality="high" bgcolor="#ffffff" width="800" height="550" name="map" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>

На сколько корректен этот способ при передачи большого количества данных порядка 15000 переменных, составляющих около 500кб? Может быть есть такой-же простой, но более подходящий способ?

Fernando Costa 11.12.2007 13:26

грузи переменные из ХМЛ-файла

Denisator 11.12.2007 13:32

Fernando Costa Я пробовал, но это оказался "сложный" для меня способ :-)) Я так и не смог отпарсить ХМЛ и вытащить оттуда данные :-(

Chas 11.12.2007 13:39

а ничего проще нет.
можно еще передавать текст из javascript, пользуясь ExternalInterface, но это не намного проще.
c LoadVars большие тексты не передашь.

CrazyFlasher 11.12.2007 13:55

Цитата:

c LoadVars большие тексты не передашь.
а сам-то пробовал коль утверждаешь? всё передаётся

Fernando Costa 11.12.2007 14:41

нет ничего проще распарсить такой ХМЛ-файл

Код:

<root>
    <node attr = "первое значение" />
    <node attr = "второе значение" />
    ...........................
</root>

или даже невалидный ХМЛ еще проще


Код:

    <node attr = "первое значение" />
    <node attr = "второе значение" />
    ...........................

В хелпе есть примеры :victory:

Denisator 11.12.2007 14:59

Fernando Costa Как работает ХМЛ вроде понятно, но вот с примерами возился (видать мало возился) и так и не допёр как его распарсить, все эти ноды и чайлды... Вообщем проще показалось делать с помощью flashvars, но когда понял сколько у меня данных - засомневался.

Fernando Costa 11.12.2007 15:20

наслаждайтесь
file.xml:

Код:

<root>
    <node attr = "первое значение" />
    <node attr = "второе значение" />
    <node attr = "третье значение" />
    <node attr = "четвертое значение" />
</root>

script:

Код:

var flooring:XML = new XML();
flooring.ignoreWhite = true;

flooring.onLoad = function(success) {
        var str = flooring.firstChild.childNodes
        for(var i=0;i<str.length;i++){

    trace(str[i].attributes.attr);
        }
};
flooring.load("file.xml");


Дружище 11.12.2007 16:47

Цитата:

Сообщение от CrazyFlasher
а сам-то пробовал коль утверждаешь? всё передаётся

GET имеет ограничение 255 символов, POST тоже имеет ограничение,но объёма которого он позволяет передать вполне достаточно для текста, переменнтых и т.д. для этого случая имеет смысл воспользоваься LoadVars :)

Chas 11.12.2007 17:05

2CraztFlasher:
Цитата:

NOTE: All browsers will support string sizes as large as 64K (65,535 bytes) in length.
к тому же еще заниматься сексом с исключением спецсимволов. XML намного лучше, один раз научиться!

amesqit 11.12.2007 21:43

Цитата:

Сообщение от Chas
к тому же еще заниматься сексом с исключением спецсимволов. XML намного лучше, один раз научиться!

Простите, а какие символы необходимо исключать? Ни разу не поподалась проблема исключения символов вручную. :eek:
Надо как-то различать, то с чем "умею" или "привык" работать и то с чем лучше работать, различать список пеерменных - LoadVars() и иерархическое xml-дерево, в данном слечае xml тут вообще ни к чему.

CrazyFlasher 11.12.2007 21:45

а теперь создай txt файл ну к примеру 5 мегов и посмотри, загрузит ли его LoadVars или нет.

ну если на то пошло, то лучше всего база данных + LoadVars...

amesqit 11.12.2007 21:54

исходя из того, с чем я сталкивался, если надо грузить 5 метров текстов, откуда то ни было это уже что-то не так с проектом :)

Danilishin 26.12.2007 17:28

вот пример
 
Файл data.xml:
Код:

<data>
    <name1>value1</name1>
    <name2>value2</name2>
    <name3>value3</name3>
    <name4>value4</name4>
    <name5>value5</name5>
</data>

Скрипт:
Код:

var myData:XML = new XML();
myData.ignoreWhite = true;
var node:XMLNode;
for(node = myData.firstChild.firstChild;node!=null;node=node.nextSibling) {
    trace(node.nodeName + "=" + node.firstChild.nodeValue);
}

На выходе имеем:
Код:

name1=value1
name2=value2
name3=value3
name4=value4
name5=value5

Пугаться чего-нибудь нового не стоит, надо ж когда-то научиться, и чем раньше тем лучше :)

Fernando Costa 26.12.2007 18:29

а разве мой пример не рабочий??? да и структура хмл мягко говоря не очень удачная...

Danilishin 27.12.2007 18:36

Цитата:

Сообщение от Fernando Costa
а разве мой пример не рабочий??? да и структура хмл мягко говоря не очень удачная...

а где обоснование Вашей точки зрения?

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

об XML:
Вам не нравится что данные в виде текстового узла? Ну хорошо, а если нужно передать текст, размером в несколько абзацев, или хотя бы просто длинную строку, не пихать же ее в аттрибут.
А еще в этом XML каждый нод имеет отдельное имя, что позволяет легко превращать этот XML в ассоциативный массив (Object), например:
Код:

...
var objData:Object = new Object();
for(node = myData.firstChild.firstChild;node!=null;node=node.nextSibling) {
    objData[node.nodeName] = node.firstChild.nodeValue;
}


Fernando Costa 27.12.2007 19:05

Вот большие строки удобно хранить в нодВелью а маленькие данные лучше хранить в аттрибутах. Игнорирование использования атрибутов влечет за собой ветвление ХМЛ-файла до большой степени вложенности и соответственно усложнению разбора

amesqit 27.12.2007 23:21

не обязательно большие строки, а именно текстовые строки на то они и текстовые узлы, т.е. строки с неизвестным, каким угодно набором символов, без какого-то явнового их пробразования... сто-то вноде "*/-%+'(')'" я поместил бы в текстовый узел только из-за непредсказуемого набора символов, различные пути файйлов, их имена, удобнее хранить в атрибутах. Различные имена атрибутов возможно и нужны в некоторых случаях, но они далеко не всегда играют какую-то определяющуюроль, я бы даже сказал очень редко... к тому же если у вас заранее точно известно количество "name", проще сделать так:
Код:

<data name1="value1" name2="value2" name3="value3" name4="value4" name5="value5" />
xml-файл заметно уменьшился, выродился в 1 узел
а получить из него данные вообще никакого цикла не надо и получите тот же объект
Код:

...
var objData:Object = new Object();
objData=myData.firstChild.attributes;

пойдем дальше, если данные имеют такую структуру, то чем мы выигрываем перед LoadVads() ? в общем ни чем, поэтому лучше отправлять и получать это дело c помощью LoadVars(), т.к. значения мы сможем забрать в любом случае, а вот передаваемых данных станет чуть меньше. Если же нам не известно каличество атрибутов, то не понимаю зачем нам какой-то объект, если гораздо удобнее пользоваться массивом, а раз так, то различия между именами узлов значения играть вообще не будут...
P.S.: пардон за столь долгие рассуждения :)

Danilishin 28.12.2007 14:29

это все верно, но под каждый конкретный случай разрабатывать отдельный парсер это трата времени (кроме случаев когда это действительно важно)
довольно распространенная задача получать данные в виде переменная=значение, конечно можно реализовывать разными способами в зависимости от контента и количества переменных, но имхо XML с текстовыми узлами подойдет в любом случае и можно смело использовать привычную структуру и парсер. Плюс в таком XML если для переменной требуются дополнительные параметры, вот их и рационально кидать в аттрибут, ибо это логично. Например, если мы в XML передаем текстовку, логично имя узла использовать в качестве переменной (идентификатор текста), в текстовом узле собственно сам текст, который кстати можно записать в виде HTML, а в аттрибуты при необходимости разместить некоторые свойства текста - положение например, ширину текстового блока, цвет и т.д. Также в атрибут можно записать автора, время создания или другие дополнительные параметры.

amesqit 28.12.2007 16:33

Цитата:

Сообщение от Danilishin
довольно распространенная задача получать данные в виде переменная=значение, конечно можно реализовывать разными способами в зависимости от контента и количества переменных

Скажите а каким образом пример моего кода зависит от количества атрибутов-переменных? :)


Часовой пояс GMT +4, время: 01:15.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.