Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Сортировка URLVariables (http://www.flasher.ru/forum/showthread.php?t=145128)

Gh >k 29.09.2010 23:15

Сортировка URLVariables
 
Всем привет.

У меня такая проблема - получаю данные через php, делаю
Код AS3:

trace(e.target.data.toString());

Получаю ID1=Один&ID2=Два&ID3=Три

Делаю
Код AS3:

var data:URLVariables=new URLVariables(e.target.data);
trace(data.toString);

Получаю D2=Два&ID3=Три&ID1=Один

То есть последовательность сбивается.

Можно ли как то преобразовать строку в переменные и не нарушать при этом сортировки?

Искал стандартные методы, не нашел. Попытался сам написать сортировку - тоже не получилось т.к. это не массив. Гугл тоже не помог. :confused:

random13 29.09.2010 23:50

способов масса есть как стандартные так и не очень

сам не пробовал но возможно подойдет метод:
Код AS3:

decode()

http://help.adobe.com/ru_RU/AS3LCR/F...0.0/index.html

derhab 30.09.2010 00:15

Gh >k, Вам просто нужно дальше отправить полученные данные в том виде в котором они получены (ID1=Один&ID2=Два&ID3=Три) или что-то другое? Почему возникает URLVariables?

Gh >k 01.10.2010 18:27

Цитата:

Сообщение от random13 (Сообщение 939602)
способов масса есть как стандартные так и не очень

сам не пробовал но возможно подойдет метод:
Код AS3:

decode()

http://help.adobe.com/ru_RU/AS3LCR/F...0.0/index.html

decode() это то же самое что и я делал. Всё равно сбивается.

Цитата:

Сообщение от derhab (Сообщение 939605)
Gh >k, Вам просто нужно дальше отправить полученные данные в том виде в котором они получены (ID1=Один&ID2=Два&ID3=Три) или что-то другое? Почему возникает URLVariables?

А как получить тогда доступ к данным? Например хочу сделать
Код AS3:

trace(data['ID1']);

без преобразования у меня не получится. Или есть способ о которм я не знаю?

Hidest 01.10.2010 19:28

А в чем сакральный смысл оставить все в таком порядке? Чем вам просто не нравится конструкция ключ=значение?

BlooDHounD 01.10.2010 20:29

я не понимаю зачем вам сортировка и зачем вы вообще преобразовываете их ещё раз?

dimarik 02.10.2010 00:02

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

Gh >k 02.10.2010 00:36

Данные которые я получаю через PHP имеют тип String. "e" а моём коде это событие Event окончания загрузки данных. Мне нужно получить доступ к данным, для этого приходится преобразовывать полученный String в URLVariables.

А упорядочивание нужно, потому что я циклом прохожусь по данным и вывожу их пользователю. И это неудобно когда всё идёт вразброс.

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

И собственно у меня не получается упорядочить данные, т.к. это не массив, и я не знаю методов работы с URLVariables.

П.С. Хелп уже читал, не посылайте меня туда )

derhab 02.10.2010 00:50

Цитата:

Получаю ID1=Один&ID2=Два&ID3=Три
так сделайте массив, так не пойдет?
Код AS3:

var str:String = e.target.data.toString();
var list:Array = str.split('&');
 
for each(var s:String in list)
trace(s.split('=')[1]);


dimarik 02.10.2010 00:55

Смысл понятен. Правда, "цыклы" немного страдают от твоего русского языка. Скажу по секрету, что флаг окончания загрузки данных (в твоем коде это "е") можно не передавать. Ты не поверишь, но и без него сработает событие Event#COMPLETE у URLLoader'а, который ты используешь для приема-передачи данных. Это легко проверить, перестав, например, передавать этот флаг.
Как я уже отмечал, если невозможно (а лучше сказать, лениво) отвязать приложение от последовательности получения данных, то можно их упорядочить в ожидаемой последовательности. Отсортировать. Т.о. задача сводится к сортировке входящих данных )

Пример? Только не говори мне, что ты не знаешь как отсортировать пары key=value по определенному критерию, иначе мне все-таки придется писать пример ). Жуть какая. Каюсь, как же мне не лениво было это писать )

Gh >k 02.10.2010 10:45

Код AS3:

var str:String = e.target.data.toString();
var list:Array = str.split('&');
 
for each(var s:String in list)
trace(s.split('=')[1]);

Не подойдёт т.к. с PHP данные приходят вида "%26" вместо пробела и т.д.

А если я не буду передавать флаг, откуда я возьму сами данные? Если не из e.target.data?
Насчет отвязки приложения от последовательности. Я не знаю других способов получения данных. Ни в одном хелпе или учебнике я не видел чтобы учили орагнизации структуры, везде только функции которые понадобятся. Да и вообще не думаю что в этом проблема.

И да, я не знаю как отсортировать ассоциативный массив. Сейчас час просидел. Ничего не нашел, и ничего не получилось самому написать. Буду очень признателен если напишете пример сортировки по алфавиту. Или хотябы ссылку кинете где копать.

P.S. Насчет цЫклов - я вроде исправил, причем сразу. Откуда откопали старую версию поста незнаю.

derhab 02.10.2010 17:28

Где пробелы? Вы написали, что получаете строку в таком виде
Цитата:

Сообщение от Gh >k (Сообщение 939593)
Получаю ID1=Один&ID2=Два&ID3=Три

и надо ее обработать...

например, по алфавиту:

Код AS3:

var str:String = 'ID1=Один&ID2=Два&ID3=Три';
var list:Array = str.split('&');
 
var data:Array = [];
for each(var s:String in list){
        var a:Array = s.split('=');
        var o:Object = {};
        o.prop = a[0];
        o.value = a[1];
        data.push(o);
}
data.sortOn('value');
 
for each(var obj:Object in data)
trace('var = ' + obj.prop + ', value = ' + obj.value);
// prop = ID2, value = Два
// prop = ID1, value = Один
// prop = ID3, value = Три


Gh >k 03.10.2010 10:26

Спассибо! Наконец то получилось. Остальное только осталось переделать под этот массив и всё.

А насчет строки - это я для примера приводил, чтобы понятней было. На самом деле там другие данные.


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

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