Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   обработать во Flash многострочный ответ от MySQL (http://www.flasher.ru/forum/showthread.php?t=142312)

Agni 18.07.2010 00:48

обработать во Flash многострочный ответ от MySQL
 
добрый вечер :)

php - MySQL - Flash AS 3.0

по запросу из Flash база MySQL отдает от 1 до 30 строк

во Flash каждая строка присваивается переменным мувиклипа (мувиклипов соответственно 1 -30)

как удобнее (лучше) всего принимать данные во Flash (массив - единственный способ?), подскажите пожалуйста

mikhailk 18.07.2010 10:50

xml, json

Agni 18.07.2010 12:05

нужно только при помощи php и AS3

пока только предполагаю сделать так:
1.отправить из Flash запрос, в результате которого получить все id полученных строк
2. отправить из Flash запросы, в каждом из которых переданным параметром будет id одной строки

но как-то не нравится, может есть возможность по-другому организовать вывод строк из MySQL-php и прием их во Flash :umnik2:

mikhailk 18.07.2010 12:21

Это и было для передачи из PHP во Flash (AS3).

Вы можете изобрести свой велосипед, а заодно и придумать, как парсить его на стороне клиента. XML парсить не надо, он сразу после получения готов к использованию. JSON покомпактнее и для него есть готовые библиотеки.

Или Вы не знаете как преобразовать массив данных в XML на стороне PHP-скрипта?

Agni 18.07.2010 12:56

создание xml и обход дерева полученного xml во Flash ставит в ступор

предидущее предположение тоже сфейлилось:

код php:
PHP код:

 do { 
$idphp=$row_present['p_id'];
$otvet="idq=$idphp";
echo 
$otvet;
 } while (
$row_present mysql_fetch_assoc($present)); 

код AS
Код AS3:

  var loader:URLLoader = URLLoader(e.target);
  var ima = new URLVariables(loader.data).idq;
name_txt.text = ima;

в поле name_txt выдал ответ(4 строки было):
Цитата:

5idq=6idq=29idq=28
то есть к ответу со второй строки AS решил добавить название переменной
:(

mikhailk 18.07.2010 14:54

не надо ничего обходить.

Если PHP отдает вот такой xml:
Код:

<?xml version="1.0" encoding="utf-8"?>
<response>
  <parameters>
      <parameter name="param1" value="Значение параметра 1" />
      <parameter name="param2" value="Значение параметра 2" />
      <parameter name="param3" value="Значение параметра 3" />
  </parameters>
</response

То в AS3 доступ к данным после загрузки:

Код AS3:

private function dataLoaderHandler(e:Event):void {
 
  var loader:URLLoader = URLLoader(e.target);
  var responseXML:XML = new XML(loader.data);
  var parametersList:XMLList = responseXML.parameters.parameter;
 
  for (var i:int=0;i<parametersList.length();i++) {
        trace("Параметр ", parametersList[i].attribute("name"),
                " значение:", parametersList[i].attribute("value") );
  }
 
}


но, с другой стороны, каждый делает, как ему удобно.

Agni 18.07.2010 15:16

удобнее - как Вы описали, только чтото не получается у меня с xml

если не трудно киньте кодом как принять в AS следующий ответ от php

Код:

<?xml version="1.0" encoding="utf-8"?>
<response>
  <object_one>
      <parameter name="param1" value="Значение параметра 1" />
      <parameter name="param2" value="Значение параметра 2" />
      <parameter name="param3" value="Значение параметра 3" />
  </object_one>
      <object_two>
      <parameter name="param1" value="Значение параметра 1" />
      <parameter name="param2" value="Значение параметра 2" />
      <parameter name="param3" value="Значение параметра 3" />
  </object_two>
</response>


mikhailk 18.07.2010 21:55

Например, так.

Код AS3:

private function dataLoaderHandler(e:Event):void {
 
  var loader:URLLoader = URLLoader(e.target);
  var responseXML:XML = new XML(loader.data);
 
  var parametersObjectOne:XMLList = responseXML.object_one.parameter;
  for (var i:int=0;i<parametersObjectOne.length();i++) {
        trace("Параметр object_one", parametersObjectOne[i].attribute("name"),
                " значение:", parametersObjectOne[i].attribute("value") );
  }
 
  var parametersObjectTwo:XMLList = responseXML.object_two.parameter;
  for (i=0;i<parametersObjectTwo.length();i++) {
        trace("Параметр object_two", parametersObjectTwo[i].attribute("name"),
                " значение:", parametersObjectTwo[i].attribute("value") );
  }
 
}

Но, поскольку объектов явно может быть больше, лучше вместо object_one и object_two написать objectParameters, а one/two и т.д. вынести в атрибуты. Тогда можно обойтись циклом по objectParameters, а внутри него - по parameter.

Код:

<?xml version="1.0" encoding="utf-8"?>
<response>
  <objectParameters objectName="one">
      <parameter name="param1" value="Значение параметра 1" />
      <parameter name="param2" value="Значение параметра 2" />
      <parameter name="param3" value="Значение параметра 3" />
  </objectParameters>
  <objectParameters objectName="two">
      <parameter name="param1" value="Значение параметра 1" />
      <parameter name="param2" value="Значение параметра 2" />
      <parameter name="param3" value="Значение параметра 3" />
  </objectParameters>
</response>


Agni 19.07.2010 02:15

спасибо :)

Dimitry_II 19.07.2010 14:18

Может, попробовать с сериализованными объектами/коллекциями? - Организация сложнее, но в работе гораздо больше удовольствия, чем хмл и прочие.


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

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