如何循环遍历 Flex 中的结果对象?

我在手动循环使用通过 HTTPService 调用获得的 xml 信息时遇到了麻烦,xml 看起来像这样:

<DataTable>
    <Row>
        <text>foo</text>
    </Row>
    <Row>
        <text>bar</text>
    </Row>
</DataTable>

当 web 服务结果事件终止时,我会执行以下操作:

for(var i:int=0;i&lt;event.result.DataTable.Row.length;i++)
{
    if(event.result.DataTable.Row[i].text == "foo")
        mx.controls.Alert.show('foo found!');
}

此代码在返回超过 1 个“行”节点之后起作用。 然而,似乎如果在那之后只有一个“行”节点事件.DataTable.Row 对象不是错误,代码随后中断。

循环的正确方法是什么 HTTP服务结果对象? 我是否需要将其转换为某种 XML列表集合或数组集合 ? 我实际上已经尝试将 resultFormat 建立为 e4x 尚未修复问题

谢谢。

3
2022-06-07 14:37:40
资源 分享
答案: 3

问题在于这个声明

event.result.DataTable.Row.length

length 不是 XMLList 的构建,而是一种方法:

event.result.DataTable.Row.length()

它令人困惑,但这就是它的手段。

添加: 实际上,最安全的做法是在重复 XMLLists 时始终使用 for each 循环,这样您就永远不会出错,代码少得多,而且更容易阅读:

for each ( var node : XML in event.result.DataTable.Row )
4
2022-06-07 15:54:01
资源

除非有多个 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!');
}
2
2022-06-07 15:03:49
资源

我会将它存储在一个 Xml 对象中,然后利用它的方法来搜索您需要的节点值。

var returnedXml:Xml = new Xml(event.result.toString());
2
2022-06-07 15:03:31
资源