Expand my Community achievements bar.

SOLVED

HttpService with JSON from server - help please

Avatar

Level 1
Hi!

I am trying to pass back a JSON object to flex using
HttpService. The scenario is like this - using HttpService I am
calling an action since i am using Struts 2.0 . This action is
supposed to return a string in JSON format. When i am passing back
the data in XML format the data is properly displayed with the
required hierarchail structure. But when I am passing back the JSON
string it is not displaying anything.



This is the call to server

<mx:HTTPService id="srv" url="...... /
myaction/getSomeData.action"/>



the srv value is coming as null.



I am a total newbie to flex.



Thanks for any help in advance,

Rohit

1 Accepted Solution

Avatar

Correct answer by
Level 2
First off, you'll need to read your response as a simple text
by specifying resultFormat="text" in your service:



<mx:HTTPService id="srv" url="
http://192.168.103.128:8081/ManageMe/manageme/generateXMLForGantt.action"
resultFormat="text"/>



Now in your result event you'll read the response as simple
text:



var rawData:String = String(event.result);



Of course, now you need to encode this string as JSON Object.
Flex don't have a built-in JSON encoder/decoder. So here is library
done by Adobe/Flex folks that hanldes JSON:




http://code.google.com/p/as3corelib/



Once you've downloaded this library and have copied in your
lib foleder, the next line would look like:



try {

//Alert.show(rawData);

var o:Object = JSON.decode(rawData);

Alert.show(o['baselineEnd']);



}

catch(e:Error) {

// handle error

}





should work!



ATTA

View solution in original post

2 Replies

Avatar

Level 1
The code is as follows:



<?xml version="1.0"?>



<mx:Application xmlns:mx="
http://www.adobe.com/2006/mxml"
xmlns:ilog="
http://www.ilog.com/2007/ilog/flex"
layout="absolute" creationComplete="srv.send()">



<mx:HTTPService id="srv" url="
http://192.168.103.128:8081/ManageMe/manageme/generateXMLForGantt.action"/>




<mx:Style>



GanttSheet



{



borderStyle:none;



rowPadding: 4;



}



TaskItemRenderer {



borderColor: "0x388F24";



backgroundColor: "0xB5D021";



rollOverColor: "0xFDF621";



borderRollOverColor: "0xF4C811";



selectedColor: "0xFDB201";



borderSelectedColor: "0xFF9201";



selectedRollOverColor: "0xFDF621";



borderSelectedRollOverColor: "0xF4C811";



textPosition: "right";



v-align: "top";



barTopMargin: 0.3;



barBottomMargin: 0.3;



}



.milestone {



startSymbolBorderColor: "0x24598a";



startSymbolColor: "0x4422EE";



}



.summary {



borderColor: "0x000000";



backgroundColor: "0x22ee56";



endSymbolBorderColor: "0x000000";



endSymbolColor: "0x000000";



startSymbolBorderColor: "0x000000";



startSymbolColor: "0x000000";



}



</mx:Style>



<mx:Script>



<![CDATA[



import mx.collections.ArrayCollection;



import mx.collections.HierarchicalData;







[Bindable]



public var tasks:HierarchicalData = new
HierarchicalData(srv);







//[Bindable]



// public var tasks:HierarchicalData = null;







[Bindable]



public var constraints:ArrayCollection = new
ArrayCollection([



{ fromId:"T2", toId:"T3", kind:"endToStart" },



{ fromId:"T3", toId:"T4", kind:"endToStart" },



{ fromId:"T5", toId:"T6", kind:"endToStart" },



{ fromId:"T6", toId:"T7", kind:"endToStart" },



{ fromId:"T7", toId:"T8", kind:"endToStart" },



{ fromId:"T7", toId:"T8", kind:"endToStart" }



]);



]]>







</mx:Script>







<mx:VBox width="100%" height="100%">







<mx:ApplicationControlBar id="toolBar" width="100%"
height="40">



<mx:HBox>



<mx:Button toolTip="Expand All Items" width="30"
height="28" click="myDataGrid.expandAll()"
icon="@Embed(source='../resources/expanded.png')"/>



<mx:Button toolTip="Collapse All Items" width="30"
height="28" click="myDataGrid.collapseAll();"
icon="@Embed(source='../resources/unhierarchical.png')"/>



<mx:Button toolTip="Zoom In" width="30" height="28"
icon="@Embed(source='../resources/zoom in5.png')"/>



<mx:Button toolTip="Zoom Out" width="30" height="28"
icon="@Embed(source='../resources/zoom out7.png')"/>



<!--<mx:Button toolTip="Expand Chart" width="30"
height="28" click="myGanttSheet.showAll(margin=10);"
icon="@Embed(source='../resources/zoom fit6.png')"/> -->



</mx:HBox>



</mx:ApplicationControlBar>







<ilog:TaskChart id="taskChart" width="100%" height="100%"



taskDataProvider="{srv.lastResult}"



taskItemStyleName="TaskItemRenderer" >



<ilog:dataGrid>



<ilog:GanttDataGrid id="myDataGrid" rowHeight="24">



<ilog:columns>



<mx:AdvancedDataGridColumn dataField="id"
headerText="ID"/>



<mx:AdvancedDataGridColumn dataField="name"
headerText="NAME"/>



<mx:AdvancedDataGridColumn dataField="baselineStart"
headerText="START TIME"/>



<mx:AdvancedDataGridColumn dataField="baselineEnd"
headerText="END TIME"/>



</ilog:columns>



</ilog:GanttDataGrid>



</ilog:dataGrid>



<ilog:ganttSheet>



<ilog:GanttSheet id="myGanttSheet"
taskItemRenderer="TaskChartCustomTaskItemRenderer"
moveEnabled="false" resizeEnabled="false"/>



</ilog:ganttSheet>



</ilog:TaskChart>







</mx:VBox>



</mx:Application>

Avatar

Correct answer by
Level 2
First off, you'll need to read your response as a simple text
by specifying resultFormat="text" in your service:



<mx:HTTPService id="srv" url="
http://192.168.103.128:8081/ManageMe/manageme/generateXMLForGantt.action"
resultFormat="text"/>



Now in your result event you'll read the response as simple
text:



var rawData:String = String(event.result);



Of course, now you need to encode this string as JSON Object.
Flex don't have a built-in JSON encoder/decoder. So here is library
done by Adobe/Flex folks that hanldes JSON:




http://code.google.com/p/as3corelib/



Once you've downloaded this library and have copied in your
lib foleder, the next line would look like:



try {

//Alert.show(rawData);

var o:Object = JSON.decode(rawData);

Alert.show(o['baselineEnd']);



}

catch(e:Error) {

// handle error

}





should work!



ATTA