如何在Flex中遍历结果对象?
时间:2020-03-05 18:46:49 来源:igfitidea点击:
我在手动循环通过HTTPService调用接收的xml数据时遇到问题,该xml看起来像这样:
<DataTable> <Row> <text>foo</text> </Row> <Row> <text>bar</text> </Row> </DataTable>
当触发webservie结果事件时,我将执行以下操作:
for(var i:int=0;i<event.result.DataTable.Row.length;i++) { if(event.result.DataTable.Row[i].text == "foo") mx.controls.Alert.show('foo found!'); }
此代码起作用,然后返回了1个以上的"行"节点,但是,如果只有一个"行"节点,则event.DataTable.Row对象不是错误,并且代码随后中断。
遍历HTTPService结果对象的正确方法是什么?我需要将其转换为某种类型的XMLList集合还是ArrayCollection?我尝试将resultFormat设置为" e4x",但尚未解决问题。
谢谢
解决方案
回答
除非存在多个Row元素,否则Row不是数组。真烦人我们必须执行类似的操作,但是我已经有一段时间没有写AS3了,所以我忘记了是否存在功能。
if (exists(event.result.DataTable) && exists(event.result.DataTable.Row)){ if (exists(event.result.DataTable.Row.length)) { for(var i:int=0;i<event.result.DataTable.Row.length;i++) { if (exists(event.result.DataTable.Row[i].text) && "foo" == event.result.DataTable.Row[i].text) mx.controls.Alert.show('foo found!'); } } if (exists(event.result.DataTable.Row.text) && "foo" == event.result.DataTable.Row.text) mx.controls.Alert.show('foo found!'); }
回答
我会将其存储在Xml对象中,然后使用其方法搜索所需的节点值。
var returnedXml:Xml = new Xml(event.result.toString());
回答
问题在于此语句
event.result.DataTable.Row.length
长度不是XMLList的属性,而是一种方法:
event.result.DataTable.Row.length()
令人困惑,但这就是事实。
另外:实际上,最安全的做法是在XMLList上进行迭代时始终使用" for each"循环,这样就永远不会出错,代码更少,更易于阅读:
for each ( var node : XML in event.result.DataTable.Row )