문제

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" 노드가 하나만 있는 경우 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를 작성하지 않았기 때문에 존재 함수가 있는지 잊어버렸습니다.

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