1. 첫번째 방법 mxml
<mx:HTTPService>
<mx:request>
<paramName1>val1</paramName1 >
</mx:request>
</mx:HTTPService>
get 방식으로 보내고자 한다면 url 속성에 바로 넘겨도 된다.
<mx:HTTPService url="urlAddress?paramName1=val1">
2. 두번째 방법 AS
<mx:HTTPService url="urlAddress?paramName1=val1">
2. 두번째 방법 AS
var params:Object = new Object();
params[paramName1] = "val1";
var httpService:HTTPService = new HTTPService();
httpService.contentType = HTTPService.CONTENT_TYPE_FORM;
httpService.url = "url address";
httpService.send(params);
Object 객체를 이용하여 파라미터를 넘긴다.
params[paramName1] = "val1"; 를 params.paramName1 = "val1"; 이렇게 해도 결과는 똑같다.
이는 Object가 Dynamic 객체라서 가능하다.
AS 또한 url 속성에 get 방식으로 파라미터 전송이 가능하다.
소스 파악해보기.
일단 api 를 살펴보자.
params[paramName1] = "val1"; 를 params.paramName1 = "val1"; 이렇게 해도 결과는 똑같다.
이는 Object가 Dynamic 객체라서 가능하다.
AS 또한 url 속성에 get 방식으로 파라미터 전송이 가능하다.
일단 api 를 살펴보자.
send | () | Methods |
public function send(parameters:Object = null):AsyncToken
HTTPService 요구를 실행합니다. Parameters는 옵션입니다만, 지정하는 경우는 contentType
에 응해, 이름과 값의 페어가 들어간 object 또는 XML object로 할 필요가 있습니다.
parameters:Object (default = null )
|
AsyncToken — Asynchronous Completion Token 를 나타내는 object입니다. result 또는 fault 이벤트의 call property로 사용 가능한 object와 같게 됩니다. |
요렇게만 나와있을 뿐.. 파라미터 객체를 어떻게 만들어서 넘기는지는 없다.
HttpService 의 소스중 send() 함수 소스를 보니 크게 두가지가 보인다. (역시 아는만큼 보인다 ㅠㅠ...).
1. if (contentType == CONTENT_TYPE_XML)
2. else if (contentType == CONTENT_TYPE_FORM)
첫번째는 파라미터가 xml형태로 넘어왔을때이고 두번째는 dynamic 객체가 넘어왔을 때다.
xml 을 파싱하는 소스는 복잡했다... (워... 무슨말인지... 다음에 자세하게 봐야겠다 ㅠㅠ..)
두번째. 객체를 파싱하는 소스를 보자.
위의 소스를 살펴보면 일단 이 객체의 맴버변수인 'contentType'이 'CONTENT_TYPE_FORM' 일때 이 분기문이 실행 된다는 것을 알 수 있다.
그리고 parameters 를 ObjectUtil.getClassInfo() 메소드로 var classinfo:Object 객체를 생성하는 것을 알 수 있다.
(ObjectUtil 클래스는 전에 Object 를 copy 할 때 썼던 클래스이다.)
getClassInfo() 메소드에 잠깐 살펴보면 "지정된 object에 관해서, 클래스 정보 및 클래스 property를 돌려줍니다."
라고 기술되어 있다.
다시 소스로 돌아와서 그렇게 생성한 classinfo를 for each()구문으로 모든 properties 를 p:* 로 할당하게 하였다.
소스를 보면 p를 key로 이용하여 parameters에서 해당 value을 찾아서 paramsToSend에 다시 값을 넣어주는 것을 볼수 있다.
이 paramsToSend 객체는 send() 메소드 끝부분에서 다음과 같이 쓰인다.
HttpService 의 소스중 send() 함수 소스를 보니 크게 두가지가 보인다. (역시 아는만큼 보인다 ㅠㅠ...).
1. if (contentType == CONTENT_TYPE_XML)
2. else if (contentType == CONTENT_TYPE_FORM)
첫번째는 파라미터가 xml형태로 넘어왔을때이고 두번째는 dynamic 객체가 넘어왔을 때다.
xml 을 파싱하는 소스는 복잡했다... (워... 무슨말인지... 다음에 자세하게 봐야겠다 ㅠㅠ..)
두번째. 객체를 파싱하는 소스를 보자.
else if (contentType == CONTENT_TYPE_FORM)
{
paramsToSend = {};
var val:Object;
//get all dynamic and all concrete properties from the parameters object
var classinfo:Object = ObjectUtil.getClassInfo(parameters);
for each (var p:* in classinfo.properties)
{
val = parameters[p];
if (val != null)
{
if (val is Array)
paramsToSend[p] = val;
else
paramsToSend[p] = val.toString();
}
}
}
위의 소스를 살펴보면 일단 이 객체의 맴버변수인 'contentType'이 'CONTENT_TYPE_FORM' 일때 이 분기문이 실행 된다는 것을 알 수 있다.
그리고 parameters 를 ObjectUtil.getClassInfo() 메소드로 var classinfo:Object 객체를 생성하는 것을 알 수 있다.
(ObjectUtil 클래스는 전에 Object 를 copy 할 때 썼던 클래스이다.)
getClassInfo() 메소드에 잠깐 살펴보면 "지정된 object에 관해서, 클래스 정보 및 클래스 property를 돌려줍니다."
라고 기술되어 있다.
다시 소스로 돌아와서 그렇게 생성한 classinfo를 for each()구문으로 모든 properties 를 p:* 로 할당하게 하였다.
for each (var p:* in classinfo.properties)
{
val = parameters[p];
if (val != null)
{
if (val is Array)
paramsToSend[p] = val;
else
paramsToSend[p] = val.toString();
}
}
소스를 보면 p를 key로 이용하여 parameters에서 해당 value을 찾아서 paramsToSend에 다시 값을 넣어주는 것을 볼수 있다.
이 paramsToSend 객체는 send() 메소드 끝부분에서 다음과 같이 쓰인다.
message.contentType = contentType;
message.method = method.toUpperCase();
if (contentType == CONTENT_TYPE_XML && message.method == HTTPRequestMessage.GET_METHOD){
message.method = HTTPRequestMessage.POST_METHOD;
}
message.body = paramsToSend;
message.httpHeaders = headers;
return invoke(message);
'Flex / AIR / AS' 카테고리의 다른 글
Meta Data 의 사용. (0) | 2009.05.10 |
---|---|
Flash Player10의 FileReference 를 이용한 로컬에 파일 저장하기. (0) | 2009.04.21 |
[행사] Flash Platform 한글문제 공동대응팀 해오름 모임 (0) | 2009.04.09 |
[Error] Could not resolve <mx:states> to a component implementation (0) | 2009.03.27 |
[Flex3.0] Module 형변환 에러 (0) | 2009.03.10 |