Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   SOAP, FLex и загрузка image и XML (http://www.flasher.ru/forum/showthread.php?t=177256)

Sn0wyDream 28.03.2012 12:09

SOAP, FLex и загрузка image и XML
 
Всем привет!

Нужен совет и небольшая помощь.

Возникла идея передавать с помощью WebService во Flex картинки и XML-документ (передавать не ссылки на объекты, а именно сами объекты). Картинку впоследствии вставить в <mx:image>, XML - отобразить как текст.

Как такое организовать?

Genzo 28.03.2012 12:52

Картинку можно в base64 передавать, а про XML-как текст не очень понятно.

Sn0wyDream 28.03.2012 13:39

Насчет картинки понял, спасибо.

Насчет XML: есть некий файл doc.xml, содержащий в себе определенную информацию.
Этот файл с помощью PHP на сервере берется из бд. Его необходимо передать во Flex с помощью WebService для дальнейшей работы.
В принципе это текст... я так понимаю, его как-то нужно преобразовать в строку на сервере, передать в Flex, в Flex преобразовать в объект XML.

Genzo 28.03.2012 13:55

Цитата:

В принципе это текст... я так понимаю, его как-то нужно преобразовать в строку на сервере, передать в Flex, в Flex преобразовать в объект XML.
XML - и так является строкой, ничего вам не нужно переводить, так и шлите, а на клиенте просто XML(data) сделайте.

Sn0wyDream 28.03.2012 23:43

Не очень понимаю, буду благодарен за более подробное объяснение.

В базе данных содержится файл doc.xml (либо другой текстовый документ .doc, .xls). В php загружаем из базы данных. Его как-то надо передать через soap в flex, в flex'e в дальнейшем использовать.
Для передачи через soap его нужно трансформировать в строку? Либо передавать как объект?

Genzo 29.03.2012 11:28

Код в студию, желательно и клиентский и серверный.

Sn0wyDream 30.03.2012 00:43

Серверная часть (движок Yii):

PHP код:

       /**
    *@return string
    *@soap
    */
    
public function xml_load()
    {

          
$post=XMLTable::model()->find(array(
        
'select'=>'xml',
        
'condition'=>'id=:id',
        
'params'=>array('id'=>1),
        ));
  
        return 
$post['xml'];
    } 

Flex:
Код AS3:

<mx:Text id="show_res" x="270" y="383" width="158" height="250">
 
</mx:Text>
.....
 
                        private function xml_load_as(event:ResultEvent):void
                        {
 
 
                                show_res.data = event.result;    //текст отображается в текстовом окне. Но формат event.result - object, мне нужен XML
                                var geo:String = event.result.toString();
 
                                var _xml:XML = new XML(geo)//Мне нужно, чтобы полученный файл был формата XML. 
                                //В данном случае преобразование не работает...
                                //(var _xml:XML = new XML(event.result); - тоже не работает


Genzo 30.03.2012 11:05

Маловато данных, как осуществляется посылка запроса и подключение, $post['xml'] - точно String, а не array или stdClass?

Добавлено через 30 секунд
И что выдает
Код AS3:

 trace(event.result)


Sn0wyDream 30.03.2012 22:11

Код AS3:

<mx:WebService id="ws" fault="mx.controls.Alert.show(event.fault.faultString)" wsdl="http://127.0.0.1/flex_test/index.php?r=webservice/demo"> 
 
<mx:operation name="xml_load" result="xml_load_as(event)" resultFormat="xml"/>
 
</mx:WebService>

Если resultFormat - "xml" или "e4x", event.result выглядит таким образом:
Код AS3:

<ns1:xml_loadResponse xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="urn:WebserviceControllerwsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <return xsi:type="xsd:string">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;

Если resultFormat - "Object":
Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<author>Alexey</author>
...

Но Object передать в дальнейший парсер XML нельзя - нужен именно тип XML.
Если вызывать
Код AS3:

var _xml:XML = new XML(Object);

во Flex ничего не происходит, видимо выдается ошибка - код просто дальше не выполняется (функции типа Alert.show("blabla"); не выполняются). Естественно, если передавать _xml парсеру (при любом значении resultFormat), он ничего не парсит.

А как понять, что stdClass или array?
В таблице базы xml хранится в ячейки с типом "blob".

На всякий случай, класс модели таблицы в Yii:
PHP код:


<?php

/**
 * This is the model class for table "XMLTable".
 *
 * The followings are the available columns in table 'XMLTable':
 * @property integer $id
 * @property string $xml
 */
class XMLTable extends CActiveRecord
{
    
/**
     * Returns the static model of the specified AR class.
     * @param string $className active record class name.
     * @return XMLTable the static model class
     */
    
public static function model($className=__CLASS__)
    {
        return 
parent::model($className);
    }

     
/**
     * @var integer 
     * @soap
     */
    
public $id;
    
/**
     * @var string 
     * @soap
     */
    
public $xml;
}



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

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