HTTPService AsyncToken 和 AsyncResponder 示例 [英] HTTPService AsyncToken and AsyncResponder example
问题描述
在哪里可以找到实现由 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:应用程序>
我不知道你真正关心的是什么,但 此处 或 此处 是使用 AsyncToken
和 AsyncResponder
- 你的
dataList
必须是Bindable
- 不要在每次循环迭代时设置
dataList
- 当你的结果准备好时,你必须在某个时刻调用你的函数
getResults
event
在result
函数中是一个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:
- your
dataList
have to beBindable
- Don't set
dataList
on each loop iteration - You have to call you function
getResults
at some point when your results are ready event
inresult
function is anEvent
but also aResultEvent
where there is aresult
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屋!