为httpservice)AsyncToken和AsyncResponder例
-
19-09-2019 - |
题
我在哪里可以找到一个例子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>
解决方案
我不知道你是真的在寻找后,但是 在这里, 或 在这里, 例如,正的方式来使用 AsyncToken
和 AsyncResponder
编辑:
- 你的
dataList
必须要Bindable
- 不要设置
dataList
在每个回路迭代 - 你必须给你打电话功能
getResults
在某一点,当你结果都准备好了 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文件,以获得的数据上运行的当地网络服务器。
Flex的一部分
<?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"?>
其他提示
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);
}
这里。
不隶属于 StackOverflow