質問

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 つ以上の「Row」ノードが返される場合に機能しますが、「Row」ノードが 1 つしかない場合、event.DataTable.Row オブジェクトはエラーではなく、その後コードが中断されるようです。

HTTPService 結果オブジェクトをループする適切な方法は何ですか?何らかのタイプの XMLList コレクションまたは ArrayCollection に変換する必要がありますか?resultFormat を「e4x」に設定しようとしましたが、まだ問題は解決していません...

ありがとう

役に立ちましたか?

解決

問題はこの発言にある

event.result.DataTable.Row.length

length の所有物ではありません XMLList, 、しかし方法:

event.result.DataTable.Row.length()

混乱しますが、そういうことです。

追加: 実際、最も安全なのは常に for each 反復するときにループする XMLListそうすれば、間違いを犯すことがなくなり、コードが減り、読みやすくなります。

for each ( var node : XML in event.result.DataTable.Row )

他のヒント

Row 要素が複数存在しない限り、Row は配列ではありません。迷惑です。このようなことをする必要がありますが、しばらく AS3 を書いていないので、existing 関数があるかどうか忘れてしまいました。

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());
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top