HTTPService를 이용하면 XML, JSON등의 형식으로 데이터를 송신 및 수신할 수 있다.
그런데 이번에 다음 책 검색API를 이용하여 웹 사이트를 만들려고 했었는데, 이 때 큰 문제가 있었다.
보통 액션스크립트를 이용해서 받아온 xml데이터를 조작해 줄 필요가 있을 것이다.
그러면 for문이나 for each문을 이용해서 하나하나의 값을 조작해줘야 하는데, xml에 들어있는 값이 여러개일 때에는 문제가 되지 않는데 1개의 값만 갖고 있을 때 문제가 발생한다.
받아온 xml의 형식은 아래 그림과 같다고 하고 예를 살펴보자.
root는 channel이고 그 밑에 Item의 총 개수를 나타내는 totalCount가 있고, Item이 0개 이상 존재하게 된다. 각 아이템마다 title과 imageSrc를 가지게 된다.
이런 형식의 데이터를 받아온다고 했을 때, 보통은 다음과 같은 방식으로 HTTPService의 resultHandler를 코딩하게 될 것이다.
이런식으로 코딩을 하게 되면 평소에는 잘 동작하는 듯 보인다. 그런데 그 결과를 잘 살펴보면 잘 못 동작하고 있다는 것을 알 수 있다.
바로 Item이 1개일 경우이다. Item이 1개일 경우에는 for each문을 수행하지 않는다. 그래서 아무런 결과 값도 처리할 수 없게 된다. 이러한 문제는 만들려는 프로그램의 종류에 따라서는 심각한 문제가 될 수 있다.
그래서 열심히 구글링한 결과 다음과 같이 코딩하면 된다는 것을 알았다.
그런데 이번에 다음 책 검색API를 이용하여 웹 사이트를 만들려고 했었는데, 이 때 큰 문제가 있었다.
보통 액션스크립트를 이용해서 받아온 xml데이터를 조작해 줄 필요가 있을 것이다.
그러면 for문이나 for each문을 이용해서 하나하나의 값을 조작해줘야 하는데, xml에 들어있는 값이 여러개일 때에는 문제가 되지 않는데 1개의 값만 갖고 있을 때 문제가 발생한다.
받아온 xml의 형식은 아래 그림과 같다고 하고 예를 살펴보자.
root는 channel이고 그 밑에 Item의 총 개수를 나타내는 totalCount가 있고, Item이 0개 이상 존재하게 된다. 각 아이템마다 title과 imageSrc를 가지게 된다.
이런 형식의 데이터를 받아온다고 했을 때, 보통은 다음과 같은 방식으로 HTTPService의 resultHandler를 코딩하게 될 것이다.
private function resultHandler(event : ResultEvent) : void { if(event.result.channel.totalCount == 0) { Alert.show("표시할 아이템이 없습니다."); return; } for each(var item : Object in event.result.channel.item) { //item.title 처리 //item.imageSrc 처리 } }
이런식으로 코딩을 하게 되면 평소에는 잘 동작하는 듯 보인다. 그런데 그 결과를 잘 살펴보면 잘 못 동작하고 있다는 것을 알 수 있다.
바로 Item이 1개일 경우이다. Item이 1개일 경우에는 for each문을 수행하지 않는다. 그래서 아무런 결과 값도 처리할 수 없게 된다. 이러한 문제는 만들려는 프로그램의 종류에 따라서는 심각한 문제가 될 수 있다.
그래서 열심히 구글링한 결과 다음과 같이 코딩하면 된다는 것을 알았다.
private function resultHandler(event : ResultEvent) : void { if(event.result.channel.totalCount == 0) { Alert.show("표시할 아이템이 없습니다."); return; } var results : ArrayCollection; if(event.result.channel.item == null) { Alert.show("데이터가 없습니다."); return; } else if(event.result.channel.item is ObjectProxy) { results = new ArrayCollection([event.result.channel.item]); } else { results = event.result.channel.item as ArrayCollection; } for each(var item : Object in result) { //item.title 처리 //item.imageSrc 처리 } }
'프로그래밍 > FLEX' 카테고리의 다른 글
플렉스에서 애니메이션 만들기 (1) | 2010.01.25 |
---|---|
플래시 플레이어 디버거(flash player debugger) 설치 (1) | 2010.01.12 |