2010-01-11 71 views
1

我在哪裏可以找到Flex應用程序的示例,該應用程序實現由AsyncToken和AsyncResponder異步調用的HTTPService? 在此先感謝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> 

回答

6

我不知道你真正尋找之後,但herehere例如,有辦法使用AsyncTokenAsyncResponder

編輯:

  1. dataList必須Bindable
  2. 不要設置dataList在每次循環迭代
  3. 你要叫你在某個時刻發揮作用getResults當你的結果準備就緒
  4. event in result function is a Event but also a ResultEvent whe再有一個包含數據

這可能看起來這(另)一個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文件的工作示例獲取在本地Web服務器上運行的數據。

柔性部分

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

腓部(getDatas.php)

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

是的這就是我說的,但我正在尋找一個示例應用程序或來源 – Franky 2010-01-11 11:02:10

+0

嗯,我想你在上面的兩個鏈接中都有你需要的。你有什麼不明白 ? – Patrick 2010-01-12 00:44:17

+0

我編輯了這個問題... 如果我使用asyncToken和asyncResponder,並且我無法解決問題,datagrid不會返回任何內容。 我的應用程序只有在字符串長度有限的情況下才有效,但我需要從無限字符串中檢索數據的東西。 – Franky 2010-01-12 09:32:07

4
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); 
} 

here實測值。

+0

我編輯我的問題請幫助,在此先感謝 – Franky 2010-01-12 09:15:44