본문 바로가기
프로그램 (PHP,Python)

플래쉬-액션스크립트 서버와 데이터 통신 (XMLConnector)

by 날으는물고기 2009. 1. 30.

플래쉬-액션스크립트 서버와 데이터 통신 (XMLConnector)

플래시에서 서버와 데이터 통신에 사용되는 클래스로, 데이터 로드가 성공적으로 수행되었는지를 확인하고 다운로드 진행상황을 모니터링 할 수 잇는 클래스 입니다. 또한 객체에 있는 모든 변수를 지정된 URL(서버사이드 프로그램)로 전송할 수 있고, 지정된 URL에 있는 모든 변수를 객체에 로드할 수 있습니다.

속성

 
contentType : String LoadVars.send() 메서드 또는 LoadVars.sendAndLoad()메서드를 호출할 때 서버에 전송되는 MINE유형(데이터의 기본 내용 형식)입니다. 기본값은 application/x-www-form-urlencoded입니다.
loaded : Boolean load 또는 sendAndLoad작업이 완료 되었는지 여부를 나타내는 부울값으로, 기본값은 undefined입니다.

생성자

 
LoadVars LoadVars 객체를 만듭니다.

메서드

 
 

addRequestHeader(header:Object, headerValue:String):Void

post 액션과 함께 전송된 Content-Type 또는 SOAPAction 같은 HTTP요청 헤더를 추가하거나 변경할 수 있는 메서드입니다.
header : Object HTTP요청 헤더 이름을 나타내는 문자열 또는 문자열의 배열입니다.
headerValue:String header와 관련된 값을 나타내는 문자열입니다.
 

decode(queryString:String):Void

변수 문자열을 지정된 LoadVars 객체의 속성으로 변환하는 메서드로, LoadVars.onData이벤트 핸들러에서 내부적으로 사용됩니다.
queryString : String 이름 /값 쌍을 포함하는 URL로 인코딩된 쿼리 문자열입니다.
 

getBytesLoaded():Number

LoadVars.load()메서드 또는 LoadVars.sendAndLoad()메서드에 의해 다운로드되는 바이트 수를 반환하는 메서드입니다. 이 메서드는 로드 작업이 진행중이 아니거나 아직 시작되지 않은 경우 undefined를 반환합니다.
 

getBytesTotal():Number

LoadVars.load()메서드 또는 LoadVars.sendAndLoad()메서드에 의해 다운로드되는 전체 바이트 수를 반환하는 메서드입니다. 이 메서드는 로드 작업이 진행중이 아니거나 아직 시작되지 않은 경우 undefined를 반환하며, 다운로드가 초기화 되었지만 서버가 HTTP내용을 전송할 수 없는 경우처럼 총 바이트 수를 결정할 수 없을때도 undefined를 반환합니다.
 

load(url:String):Boolean

지정된 URL에서 변수를 다운로드해 변수 데이터를 파싱한 다음, 결과로 나타나는 변수를 LoadVars객체에 배치하는 메서드로, 서버에 있는 데이터를 가져올 때 사용합니다.
url : String 문자열 또는 변수를 다운로드 할 URL입니다.
 

send(url:String, target:String, [method:String]):Boolean

LoadVars객체의 변수를 지정된 URL에 전송하는 메서드로, 플래시에 있는 데이터를 서버로 전송할 때 사용합니다.
url : String 문자열 또는 변수를 업로드 할 URL입니다.
target : String

전송이 완료된 후 결과값을 확인하기 위한 브라우저 창 또는 프레임으로, 특정 윈도우의 이름을 직접 사용할 수도 있고 다음과 같은 예약된 대상 이름을 사용할 수도 있습니다.
- _self : 윈도우의 현재 프레임을 지정합니다.
- _blank : 새 윈도우를 지정합니다.
- _parent : 현재 프레임의 부모를 지정합니다.
- _top : 현재 윈도우의 최상위 프레임을 지정합니다.

method : String [선택사항] HTTP프로토콜의 GET 또는 POST메서드입니다. 기본값은 POST입니다.
 

sendAndLoad(url:String, target:Object, [method:String]):Boolean

LoadVars객체의 변수를 지정된 URL에 전송하고 다운로드하는 메서드로, 전송과 로드를 동시에 수행한다.
url : String 문자열 또는 변수를 업로드 할 URL입니다.
target : Object 다운로드한 변수를 수신하는 LoadVars 또는 XML객체입니다.
method : String [선택사항] http프로토콜의 GET 또는 POST 메서드입니다. 기본값은 POST입니다.
 
toString():String

my_lv내의 열거 가능한 모든 변수를 포함하는 문자열을 applecation/x-www-form-urlencoded로 인코딩되는 MIME내용으로 반환하는 메서드로 다음 예제처럼 my_lv객체의 속성을 URL인코딩된 형식으로 반환합니다.

var my_lv:LoadVars = new LoadVars();
my_lv.name = "cornet";
my_lv.age = 31;
trace(my_lv.toString()); // [Output]패널 : age=26&name=cornet


이벤트

 
onData = function(src:String){} 서버에서 데이터를 완전히 다운로드했을 때 또는 서버에서 데이터를 다운로드 하는 동안 오류가 발생할 때 호출되는 이벤트입니다.
onHTTPStatus = function(httpStatus:Number){} 플래시 플레이어가 서버로부터 HTTP상태코드를 받을 때 호출되는 이벤트입니다.
onLoad = function(success:Boolean){} LoadVars.load() 메서드 또는 LoadVars.sendAndLoad()메서드 작업이 종료되었을때 호출되는 이벤트입니다.

 



참고 사이트

http://www.miniusa.com/minimail/
http://www.mskgent.be/ - 박물관 내의 데이터들을 외부의 데이터에 저장하고 데이터를 가져와 화면에 보여주도록 하는 사이트
http://trend.paran.com/ - 사용자들이 실시간으로 선택한 정보를 표현
http://www.richardfoster.com/
http://www.idaehan.com/happywave/webzine/main_200608.jsp/

플래시와 서버간의 데이터 통신을 통해 구현할 수 있는 웹 사이트는 너무나도 무궁무진합니다. 플래시로 제작된 게시판, 이메일 보내기, 포트폴리오 리스트, 뉴스등 실시간으로 컨텐츠 내용이 변동되는 경우는 모두 다 서버와 데이터 통신을 통해 구현된다고 보면 됩니다. 이런경우 플래시는 일반적인 웹 페이지와 같이 데이터를 서버에 보내고 필요한 데이터를 받아서 보여주는 역할만 한다고 보면 됩니다.

데이터를 실제 저장하거나 저장된 데이터를 찾는 역할은 플래시 자체적으로는 불가능합니다. 이런 역할을 하려면 서버사이드 언어로 제작된 페이지가 필요합니다. 서버사이드 언어는 서버에서 실행되는 프로그램으로서 일반적으로 PHP, ASP, JSP등의 언어로 만들어진 페이지를 말합니다.


예제

fscommand("allowscale", false);

// Tween 클래스 사용
import mx.transitions.Tween;
import mx.transitions.easing.*;

// 초기 셋팅
System.useCodepage = true;
autoSetting_0_mc.gotoAndStop(2);
cover_mc._visible = false;
alert_mc._x = Stage.width;
Selection.setFocus("from_txt");

// 사용 변수
var dataURL:String = "http://www.aidone.co.kr/as2Study/loadvars/";
var autoSetting:String = "A";
var sendCheck:Boolean = false;

// 커버 버튼 영역 셋팅
cover_mc.onRollOver = function(){
 this.useHandCursor = false;
}

// 첫번째 자동 셋팅 선택
autoSetting_0_mc.onRelease = function(){
 this.gotoAndStop(2);
 autoSetting_1_mc.gotoAndStop(1);
 autoSetting = "A";
}//라디오버튼

// 두번째 자동 셋팅 선택
autoSetting_1_mc.onRelease = function(){
 this.gotoAndStop(2);
 autoSetting_0_mc.gotoAndStop(1);
 autoSetting = "B";
}

// 자동 셋팅을 위해서 데이터를 로드합니다.
loadBtn_mc.onRelease = function(){
 var result_lv:LoadVars = new LoadVars();
 result_lv.onLoad = function(success:Boolean){
  if(success){
   load_txt.text = unescape(this.toString());
   from_txt.text = this.from;
   to_txt.text = this.to;   
   subject_txt.text = this.subject;  
   Selection.setFocus("message_txt");
  }else{
   alert("view","데이터를 불러오지 못했습니다.\n데이터 경로를 확인해주세요.");
  }
 };
 var send_lv:LoadVars = new LoadVars();
 send_lv.autoSetting = autoSetting;
 send_txt.text = send_lv.toString();
 send_lv.sendAndLoad(dataURL+"autoSetting.php",result_lv,"POST");
}

// 이메일 보내기
sendBtn_mc.onRelease = function(){
 var result_lv:LoadVars = new LoadVars();
 result_lv.onLoad = function(success:Boolean){
  if(success){
   alert("view",this.message);
  }else{
   alert("view",this.message);
  }
 };
 var send_lv:LoadVars = new LoadVars();
 send_lv.from = from_txt.text;
 send_lv.to = to_txt.text; 
 send_lv.subject = subject_txt.text;  
 send_lv.message = message_txt.text;
 if(from_txt.text != "" && to_txt.text != "" && subject_txt.text != "" && message_txt.text != "" ){
  sendCheck = true;
  send_lv.sendAndLoad(dataURL+"sendMail.php",result_lv,"POST"); 
 }else{
  alert("view","누락된 데이터가 있습니다.\n데이터를 확인해주세요.");
 }
}

// 알림창 제어
function alert(viewCheck:String,message:String):Void{
 if(viewCheck == "view"){
  cover_mc._visible = true;
  alert_mc.result_txt.text = message;
  alert_mc._x = Stage.width;
  new Tween(alert_mc,"_x",Strong.easeInOut,alert_mc._x,150,20,false);
 }else{
  if(sendCheck == true){
   from_txt.text = to_txt.text = subject_txt.text = message_txt.text =  send_txt.text = load_txt.text = "";
   sendCheck = false;
   Selection.setFocus("from_txt");
  }
  cover_mc._visible = false;
  new Tween(alert_mc,"_x",Strong.easeInOut,alert_mc._x,Stage.width*-1,20,false);
 }
}

// 알림창 닫기
alert_mc.okBtn_mc.onRelease = function(){
 alert("hide",null);
}


XML 데이터를 송수신 할 수 있는 클래스 - XMLConnector

플래시에서 XML데이터를 보내거나 받을 때 사용한 클래스로, XML데이터를 반환하는 데이터 소스에 다른 구성요소를 바인딩하면 구성요소간에 통신 할 수 있습니다. 바인딩이란 한 구성요소의 속성을 다른 구성요소에 매핑하는 것을 말합니다. 구성요소 A의 값이 변경되면 구성요소 B는 구성요소 A값을 참조해 새로운 값으로 보이는 것입니다. 바인딩에 관해서는 실제 예제를 제작하면서 자세히 설명하도록 하겠습니다.

속성

XMLConnector.direction 데이터를 전달했는지, 수신했는지 또는 데이터를 전달하고 수신했는지를 나타내는 속성입니다.

XMLConnector.ignoreWhite

XML데이터의 불필요한 공백을 삭제시키는 부울(Boolean)값 속성으로, 기본은 false입니다.
XMLConnector.multipleSimultaneousAllowed 동시에 여러 XML데이터 호출이 발생할 수 있는지를 나타내는 부울(Boolean)값 속성으로, 기본은 false입니다.

XMLConnector.params

trigger()메서드 작업을 실행할 때 서버로 보내는 데이터 지정 속성입니다.

XMLConnector.results

trigger()메서드 작업의 결과로, 서버에서 수신한 데이터를 식별하는 속성입니다.

XMLConnector.suppressInvalidCalls

매개변수가 유효하지 않을 경우 호출을 취소할지 여부를 나타내는 부울(Boolean)값 속성으로, 속성값이 true이면 매개변수의 유효성 검사를 진행하고, 실패하면 trigger()메서드가 중단됩니다.

XMLConnector.URL

XML데이터를 수신, 송신할 때 사용하는 주소 속성입니다.

메서드

XMLConnector.trigger() XMLConnector구성요소를 통해 서버와 호출을 시작하는 메서드로, XML데이터 송 수신을 시작하는 것을 의미합니다.

이벤트

XMLConnector.result 서버와 통신이 성공적으로 완료되었을 때 실행되는 이벤트입니다.

XMLConnector.send

서버와 통신을 시작할때 실행되는 이벤트입니다.

XMLConnector.status

서버와 통신산태를 알릴 때 실행되는 이벤트입니다.


참고 사이트
http://www.kobalt60.com/

플래시에서 데이터를 주고 받을 때 가장 안정적이고 효과적으로 사용할 수 있는 XML은 가공 및 확장성이 뛰어나기 때문에 플래시 데이터 연동에 가장 많이 사용하고 있습니다. 플래시는 사용자가 손쉽게 XML 데이터를 수신해서 사용할 수 있도록 XMLConnect 구성요소를 제공합니다. 아무리 복잡한 구조의 XML이라도 XMLConnector구성요소를 이용하면 손쉽게 XML데이터를 관리 할 수 있습니다.

728x90

댓글