이번에는 Ajax.Net ( 이하 Ajax ) 이 제시한 두가지 콜백 방법의 차이에 대해서 알아봅시다.
예제에 필요한 DLL 을 다운 받기 위해서 다음의 사이트에서 다운 받으실수 있습니다.
다운받은 DLL 을 프로젝트에 참조시킵니다.
다음은 Web.Config 파일에 다음의 구문을 추가 합니다.
|
<system.web>
<httpHandlers>
<addverb="*"path="*.ashx"type="AjaxPro.AjaxHandlerFactory,AjaxPro.2"/>
</httpHandlers>
</system.web> |
이제 기본 설정은 모두 마쳤습니다.
이번에도 여과없이 예제 샘플부터 보도록 하겠습니다.
|
publicpartialclassAjaxNet : System.Web.UI.Page
{
protectedvoid Page_Load(object sender, EventArgs e)
{
AjaxPro.Utility.RegisterTypeForAjax( typeof(AjaxNet) );
TextBox1.Attributes["OnKeyPress"] = txtChange1(this)";
TextBox2.Attributes["OnKeyPress"] = txtChange2(this)";
}
[AjaxPro.AjaxMethod]
publicstring GetMessage()
{
System.Threading.Thread.Sleep(1000);
return"메서드가 호출되었습니다";
}
} |
AjaxPro.Utility.RegisterTypeForAjax( typeof(AjaxNet) ); 의 구문으로 비동기 호출 대상 클래스를 등록할 수 있습니다. This.GetType() 과 같이 지정하신다면 정상적으로 작동되지 않습니다.
TextBox1.Attributes["OnKeyPress"] = "txtChange1(this)";
TextBox2.Attributes["OnKeyPress"] = "txtChange2(this)";
TextBox 에 밑의 html 소스에 포함되는 자바스크립트를 이벤트에 연결합니다.
GetMessage() 메서드는 콜백 받기 위한 메서드로 호출되면 1초의 쓰레드 Sleep을 주고 string을 리턴합니다
HTML 소스는 다음의 같습니다.
|
<headrunat="server">
<title>제목 없음</title>
<scripttype="text/javascript">
function txtChange1( obj )
{
if( obj.value.length == 9 )
{
alert( AjaxNet.GetMessage().value );
}
}
function txtChange2( obj )
{
if( obj.value.length == 9 || obj.value.length == 10)
{
AjaxNet.GetMessage(txtChange2_Callback);
}
}
function txtChange2_Callback( response )
{
var obj = response.value;
if( obj != null && typeof(obj) == "string" )
{
alert( obj );
}
}
</script>
</head>
<body>
<formid="form1"runat="server">
<div>
<asp:TextBoxID="TextBox1"runat="server"MaxLength="100"></asp:TextBox>
<p></p>
<asp:TextBoxID="TextBox2"runat="server"MaxLength="100"></asp:TextBox>
</div>
</form>
</body>
|
(OnKeyPress 는 키보드가 눌려지는순간 발생하므로 10번째 텍스트부터 콜백이 일어납니다)
소스가 완성되었다면 각각 텍스트 박스에서 아무 알파벳을 꾸욱 누르고 계셔 보세요.
1. AjaxNet.GetMessage().value
이 메서드가 호출되는 순간 스레가 1초 쉬고, 리턴받은string 을 보여줍니다.
보시는 바와 같이 콜백이 모두 완료될때까지 클라이언트는 아무 것도 못합니다.
마치, 컴퓨터가 잠깐 먹통이 된 듯 콜백이 완전히 종료되야 다음 텍스트가 눌러지는
것을 확인할 수 있습니다.
2. AjaxNet.GetMessage(txtChange2_Callback);
두번째 텍스트 박스의 함수는 Callback 과 매핑되어 있습니다.
이상하게 1번 방법의 호출과는 상당히 다른 결과를 보여줍니다.
눈치빠른 분이라면 잠깐 멈찟 하는듯 하나 키보드로 누른 텍스트는 이내 쭈욱 써지는
것을 확인할 수 있습니다.
이렇게 상이한 결과에 대해 많이 궁금하여 여러 문서를 검색해 보았으나, 그 이상의 해답을 찾지 못하였습니다.^^;
추측건데, 2번 경우의 호출은 단지 호출만 할뿐 Callback 에 대해선 txtChange2_Callback에게 위임하게 되고, 1번의 경우 호출과의 매핑된 콜백이 없기 때문에, 콜백이 완료되기 전까지 무한 대기 상태에 빠지는 듯 합니다.
다음에 또 기회가 된다면 보안적인 요소가 강화된 AjaxPro 에 추가된 AjaxEnum,AjaxProperty, 캐시,및 세션 다루는 방법에 대해 알아보도록 하겠습니다.
(기회가 된다면… ^^;; )
소스코드 첨부 하였습니다~
재미없는 글 읽어주셔서 감사합니다^^//
'.NET > AJAX' 카테고리의 다른 글
| Ajax.Net 으로 DataSet 컬렉션 제어하기 (0) | 2007/07/08 |
|---|---|
| AJAX 로 구현한 윈도우 (0) | 2007/04/06 |
| Ajax.Net 의 두가지 콜백 방법의 차이 (0) | 2007/04/05 |
| 채팅방 베타 (0) | 2007/04/05 |
| Ajax 를 활용한 간단한 채팅 로직 (0) | 2007/04/05 |





