PDA

Просмотр полной версии : Передача данных флэшу


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
а сам-то пробовал коль утверждаешь? всё передаётся 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
к тому же еще заниматься сексом с исключением спецсимволов. 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
а разве мой пример не рабочий??? да и структура хмл мягко говоря не очень удачная...
а где обоснование Вашей точки зрения?

об примере:
я верю что Ваш пример рабочий, я просто предоставил другую реализацию, где циклом 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
довольно распространенная задача получать данные в виде переменная=значение, конечно можно реализовывать разными способами в зависимости от контента и количества переменных
Скажите а каким образом пример моего кода зависит от количества атрибутов-переменных? :)