First, you can use a single HTTPService instance. The AsyncToken allows you to
match a call with a result. Thus you only need a single result handler. I
assign a string value to a queryId property on the call token, then use a
switch statement in the result handler to decide what to do next. The code
snippets below show an example of this.
Tracy
Sample code using HTTPService, e4x, handler function to populate a list item.
Also shows usage of AsyncToken.
The DataGrid tag:
<mx:DataGrid id="dg" dataProvider="{_xlcMyListData}" .../>
The HTTPService tag:
<mx:HTTPService id="service" resultFormat="e4x" result="onResult(event)"
fault="..../>
Script block declaration:
import mx.rpc.Events.ResultEvent;
import mx.rpc.AsyncToken;
[Bindable]private var _xlcMyListData:XMLListCollection;
Invoke send:
var oRequest:Object = new Object();
oRequest.Arg1 = "value1";
var callToken:AsyncToken = service.send(oRequest);
callToken.callId = "myQuery1";
Result Handler function:
private function onResult(oEvent:ResultEvent):void {
var xmlResult:XML = XML(event.result); //converts result
Object to XML. can also use "as" operator
var xlMyListData:XMLList = xmlResult.myListData; //depends on xml
format, is row data
_xlcMyListData = new XMLListCollection(xlMyListData); //wrap the XMLList in a
collection
trace(_xlcMyListData.toXMLString()); //so you can see
exactly how to specify dataField or build labelFunction
var callToken:AsyncToken = oEvent.token;
var sCallId = callToken.callId; //"myQuery1"
switch(sCallId) { //Process the result
conditionally
case "myQuery1":
doQuery2(); //do whatever. this
example calls another data service query
break;
...
}
}//onResult
________________________________________
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Harry
Saputra
Sent: Wednesday, January 23, 2008 2:46 PM
To: [email protected]
Subject: [flexcoders] Refreshing DataGrid Automatically when submit a record (
use two HTTPService )
Dear All,
I try to build simple insert and showing data with two HTTPService like that (
sorry for long source code ) :
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*"
creationComplete="anggotaRetrieve.send(); createListener();" layout="absolute">
<mx:Script>
<![CDATA[
import flash.events.MouseEvent;
public function createListener():void {
btnSubmit.addEventListener(MouseEvent.CLICK,refresh);
}
public function refresh(e:MouseEvent):void {
anggotaRetrieve.send();
}
]]>
</mx:Script>
<mx:HTTPService id="anggotaInsert" url="insert.php" useProxy="false"
method="POST" >
<mx:request xmlns="">
<username>{txtUserName.text}</username>
<password>{txtPassword.text}</password>
<email>{txtEmail.text}</email>
</mx:request>
</mx:HTTPService>
<mx:HTTPService id="anggotaRetrieve" url="retrieve.php" useProxy="false">
</mx:HTTPService>
<mx:Form width="400" height="150" left="10" top="10">
<mx:FormItem label="Username">
<mx:TextInput id="txtUserName" />
</mx:FormItem>
<mx:FormItem label="password">
<mx:TextInput id="txtPassword" />
</mx:FormItem>
<mx:FormItem label="Email">
<mx:TextInput id="txtEmail" />
</mx:FormItem>
<mx:FormItem label="">
<mx:Button id="btnSubmit" label="submit"
click="anggotaInsert.send()" />
</mx:FormItem>
</mx:Form>
<mx:Panel x="10" y="168" width="500" height="250"
layout="absolute" title="Tabel Anggota - POSTGRESQL">
<mx:DataGrid id="DgAnggotaRetrieve"
dataProvider="{anggotaRetrieve.lastResult.anggota.row}" width="100%"
height="170">
<mx:columns>
<mx:DataGridColumn
headerText="username" dataField="username" />
<mx:DataGridColumn
headerText="password" dataField="password" />
<mx:DataGridColumn
headerText="email" dataField="email" />
</mx:columns>
</mx:DataGrid>
</mx:Panel>
</mx:Application>
It's Working Done, but need to click a btnSubmit twice to shown an update data
on DataGrid....
How to create "just one click" and I can get a result on DataGrid ?
I have try to build with one HTTPService, and it's working. But I can't build
with two HTTPService.. Help me to solving this problem.
Thanks for attention