HTTPService AsyncToken 和 AsyncResponder 示例 [英] HTTPService AsyncToken and AsyncResponder example

查看:25
本文介绍了HTTPService AsyncToken 和 AsyncResponder 示例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在哪里可以找到实现由 AsyncToken 和 AsyncResponder 异步调用的 HTTPService 的 Flex 应用程序示例?提前致谢

httpservice 以一定的频率发送这样的字符串:

row#column#number#row#column#number#row#column#number#....

编辑代码:

<mx:脚本><![CDATA[导入 mx.rpc.remoting.RemoteObject;导入 mx.rpc.events.ResultEvent;导入 mx.rpc.events.FaultEvent;导入 mx.rpc.http.mxml.HTTPService;导入 mx.rpc.AsyncRequest;导入 mx.rpc.AsyncResponder;导入 mx.rpc.AsyncToken;导入 mx.collections.ArrayCollection;导入 mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;导入 mx.controls.AdvancedDataGrid;导入 mx.controls.Alert;导入 mx.rpc.IResponder;[可绑定]公共变量 dataList:ArrayCollection;公共函数 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)}返回交流;}公共函数结果(事件:结果事件):无效{dataList = getResults( String(event.result) );}公共功能故障(事件:FaultEvent):无效{dataList = getResults(String(event.fault));}公共函数 onCreationComplete():void{var service:HTTPService = new HTTPService();service.url = "http://10.15.20.75/server4flex/servlet/Datagen";service.resultFormat = "文本";var token:AsyncToken = service.send(dataList);token.addResponder(new mx.rpc.Responder(result, fault));}]]></mx:脚本><mx:AdvancedDataGrid id="dg"dataProvider="{结果}"实时滚动=真"x="10" y="10" 宽度="621"VerticalScrollPolicy="on"><mx:columns><mx:AdvancedDataGridColumn dataField="row"headerText="里加"/><mx:AdvancedDataGridColumn dataField="column"headerText="科隆纳"/><mx:AdvancedDataGridColumn dataField="value"headerText="Valore"/></mx:columns></mx:AdvancedDataGrid></mx:应用程序>

解决方案

我不知道你真正关心的是什么,但 此处此处 是使用 AsyncTokenAsyncResponder

  1. 你的dataList必须是Bindable
  2. 不要在每次循环迭代时设置dataList
  3. 当你的结果准备好时,你必须在某个时刻调用你的函数 getResults
  4. eventresult 函数中是一个 Event 也是一个 ResultEvent,其中有一个 result 包含您的数据的字段

可能看起来像这样(未经测试):

[可绑定]公共变量 dataList:ArrayCollection;公共函数 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( {行:数据[i],列:数据[i+1],值:数据[i+2]});}返回交流;}私有函数结果(事件:结果事件):无效{dataList = getResults( String(event.result) );}

Edit2:

这是一个使用简单的 php 文件来获取在本地 Web 服务器上运行的数据的工作示例.

<块引用>

柔性部分

<mx:脚本><![CDATA[导入 mx.collections.ArrayCollection;导入 mx.rpc.AsyncToken;导入 mx.rpc.Responder;导入 mx.rpc.events.FaultEvent;导入 mx.rpc.events.ResultEvent;导入 mx.rpc.http.mxml.HTTPService;[可绑定]公共变量数据列表:ArrayCollection;公共函数 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)}返回交流;}公共函数结果(事件:ResultEvent):无效{dataList = getResults(String(event.result));}公共功能故障(事件:FaultEvent):无效{//在这里做任何你想管理你收到的错误的事情}公共函数 onCreationComplete() : 无效{var service : HTTPService = new HTTPService();service.url = "http://127.0.0.1/getDatas.php";service.resultFormat = "文本";var token : AsyncToken = service.send();token.addResponder(new mx.rpc.Responder(result, fault));}]]></mx:脚本><mx:AdvancedDataGrid id="dg"dataProvider="{dataList}"实时滚动=真"x="10" y="10" 宽度="621"VerticalScrollPolicy="on"><mx:columns><mx:AdvancedDataGridColumn dataField="row"headerText="里加"/><mx:AdvancedDataGridColumn dataField="column"headerText="科隆纳"/><mx:AdvancedDataGridColumn dataField="value"headerText="Valore"/></mx:columns></mx:AdvancedDataGrid></mx:应用程序>

<块引用>

PHP 部分 (getDatas.php)

Where can I find an example of Flex application which implements an HTTPService asynchronously called by an AsyncToken and an AsyncResponder? Thanks in advance

the httpservice send a string like this with a certain frequency:

row#column#number#row#column#number#row#column#number#....

EDITED CODE:

<?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>

解决方案

I dont know what you are really looking after but here or here for example, are way to use AsyncToken and AsyncResponder

Edit:

  1. your dataList have to be Bindable
  2. Don't set dataList on each loop iteration
  3. You have to call you function getResults at some point when your results are ready
  4. event in result function is an Event but also a ResultEvent where there is a result field containing your data

Which may look as this (untested):

[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:

this is a working example using a simple php file to get the data running on a local web server.

Flex part

<?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 part (getDatas.php)

<?php print "1#c1#v1#2#c2#v2#3#c3#v3"?>

这篇关于HTTPService AsyncToken 和 AsyncResponder 示例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆