HTTPService AsyncToken и AsyncResponder, пример

Где я могу найти пример приложения Flex, которое реализует HTTPService, асинхронно вызываемый AsyncToken и AsyncResponder? заранее спасибо

httpservice отправляет такую ​​строку с определенной частотой:

строка # столбец # номер # строка # столбец # номер # строка # столбец # номер # ....

РЕДАКТИРОВАННЫЙ КОД:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application creationComplete="onCreationComplete()" 
xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
    import mx.rpc.remoting.RemoteObject;
    import mx.rpc.events.ResultEvent;
    import mx.rpc.events.FaultEvent;
    import mx.rpc.http.mxml.HTTPService;
    import mx.rpc.AsyncRequest;
    import mx.rpc.AsyncResponder;
    import mx.rpc.AsyncToken;
    import mx.collections.ArrayCollection;
    import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
    import mx.controls.AdvancedDataGrid;
    import mx.controls.Alert;
    import mx.rpc.IResponder;


    [Bindable]
    public var dataList:ArrayCollection;

    public function getResults(source:String) : ArrayCollection {
    var ac:ArrayCollection = new ArrayCollection();
    var data:Array = source.split('#');
    for (var i:int = 0; i < data.length; i += 3) {
    var dataObj:Object = {row: data[i], column: data[i+1], value: data[i+2]};     
    ac.addItem(dataObj)
    }

    return ac;
    }
    public function result(event:ResultEvent):void{
    dataList = getResults( String(event.result) );
    }
    public function fault(event:FaultEvent) : void {
    dataList = getResults(String(event.fault)); 
    }

public function onCreationComplete():void
{
var service:HTTPService = new HTTPService();
service.url = "http://10.15.20.75/server4flex/servlet/Datagen";
service.resultFormat = "text";
var token:AsyncToken = service.send(dataList);
token.addResponder(new mx.rpc.Responder(result, fault));
}

]]>
</mx:Script>
<mx:AdvancedDataGrid id="dg"
dataProvider="{result}"  
liveScrolling="true"  
    x="10" y="10" width="621"
    verticalScrollPolicy="on"
 >
        <mx:columns>
                    <mx:AdvancedDataGridColumn dataField="row"
           headerText="Riga"/>
                    <mx:AdvancedDataGridColumn dataField="column"
           headerText="Colonna"/>
                    <mx:AdvancedDataGridColumn dataField="value" 
           headerText="Valore"/>
        </mx:columns>
 </mx:AdvancedDataGrid>

 </mx:Application>

person Fsee    schedule 11.01.2010    source источник


Ответы (2)


Я не знаю, что вам на самом деле нужно, но здесь или , например, здесь, это способ использования AsyncToken и AsyncResponder

Изменить:

  1. ваш dataList должен быть Bindable
  2. Не устанавливайте dataList на каждой итерации цикла
  3. Вы должны вызвать функцию getResults в какой-то момент, когда будут готовы результаты
  4. event в result функция - это Event, но также ResultEvent, где есть result поле, содержащее ваши данные

Что может выглядеть так (непроверено):

[Bindable]
public var dataList:ArrayCollection;

public function getResults(source:String) : ArrayCollection {
    var ac:ArrayCollection = new ArrayCollection();
    var data:Array = source.split('#');
    for (var i:int = 0; i < data.length; i += 3) {  
     ac.addItem( {row: data[i], column: data[i+1], value: data[i+2]} );
    }
    return ac;
}

private function result(event:ResultEvent) : void {
 dataList = getResults( String(event.result) );
}

Edit2:

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

Гибкая часть

<?xml version="1.0" encoding="utf-8"?>
<mx:Application creationComplete="onCreationComplete()"
            xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
  import mx.collections.ArrayCollection;
  import mx.rpc.AsyncToken;
  import mx.rpc.Responder;
  import mx.rpc.events.FaultEvent;
  import mx.rpc.events.ResultEvent;
  import mx.rpc.http.mxml.HTTPService;

    [Bindable]
    public var dataList : ArrayCollection;

    public function getResults(source : String) : ArrayCollection {
        var ac : ArrayCollection = new ArrayCollection();
        var data : Array = source.split('#');
        for (var i : int = 0; i < data.length; i += 3) {
            var dataObj : Object = {row: data[i], column: data[i + 1], value: data[i + 2]};
            ac.addItem(dataObj)
        }

        return ac;
    }

    public function result(event : ResultEvent) : void {
        dataList = getResults(String(event.result));
    }

    public function fault(event : FaultEvent) : void {
        //here do whatever you want to manage the error you received
    }

    public function onCreationComplete() : void
    {
        var service : HTTPService = new HTTPService();
        service.url = "http://127.0.0.1/getDatas.php";
        service.resultFormat = "text";
        var token : AsyncToken = service.send();
        token.addResponder(new mx.rpc.Responder(result, fault));
    }

]]>
</mx:Script>
<mx:AdvancedDataGrid id="dg"
                     dataProvider="{dataList}"
                     liveScrolling="true"
                     x="10" y="10" width="621"
                     verticalScrollPolicy="on"
        >
    <mx:columns>
        <mx:AdvancedDataGridColumn dataField="row"
                                   headerText="Riga"/>
        <mx:AdvancedDataGridColumn dataField="column"
                                   headerText="Colonna"/>
        <mx:AdvancedDataGridColumn dataField="value"
                                   headerText="Valore"/>
    </mx:columns>
</mx:AdvancedDataGrid>

</mx:Application>

Часть PHP (getDatas.php)

<?php print "1#c1#v1#2#c2#v2#3#c3#v3"?>
person Patrick    schedule 11.01.2010
comment
да вот о чем я говорю, но я искал образец приложения или исходник - person Fsee; 11.01.2010
comment
Что ж, я думаю, у вас есть все, что вам нужно, в двух ссылках выше. Что ты не понимаешь ? - person Patrick; 12.01.2010
comment
Я отредактировал вопрос ... datagrid ничего не возвращает, если я использую asyncToken и asyncResponder, и я не могу решить проблему. Мое приложение работает, только если строка имеет ограниченную длину, но мне нужно что-то, кто извлекает данные из бесконечной строки. - person Fsee; 12.01.2010
comment
Я отредактировал свой пост последней версией приложения, но оно все равно не работает, и я не могу решить проблему - person Fsee; 12.01.2010
comment
Вы больше не добавляете обработчик результата к асинхронному токену, почему? token.addResponder (новый ответчик (результат, ошибка)); - person Patrick; 12.01.2010
comment
отредактирован, но все еще не работает, возможно ли, что моя идея приложения не правильная? - person Fsee; 13.01.2010
comment
Смотрите мою последнюю правку, я привожу проверенный и рабочий пример. Вы устанавливаете свой dataProvider на {result}, это должен быть {dataList}. В обработчике ошибок вам не следует выполнять getResults, так как произошла ошибка, вы наверняка не получите ожидаемые данные. Теперь, когда мой пример работает, вы уверены, что получаете данные со своего сервера? Не возникает ли ошибка безопасности при доступе к данным из одного домена в другой? И т.д... - person Patrick; 13.01.2010
comment
оно работает!!!! единственная проблема заключается в том, что если я зацикливаю php с помощью оператора while или for, значения приходят все вместе, а не одно за другим при каждом запросе: ‹? php for ($ i = 1; $ i‹ 100; i ++) { эхо rand (1,100). #. rand (1,100). #. rand (1,100). #; }? › - person Fsee; 13.01.2010

private function onCreationComplete():void
{
    var service:HTTPService = new HTTPService();
    service.url = "http://www.google.com";
    service.resultFormat = "text";
    var token:AsyncToken = service.send();
    token.addResponder(new mx.rpc.Responder(result, fault));
}

private function result(event:Event):void
{
    trace(1, event);
}

private function fault(event:Event):void
{
    trace(2, event);
}

Найдено здесь.

person James Ward    schedule 11.01.2010