통합검색
· 마을서비스란?  · 포럼마을  · 일반마을  · 테마마을  · 마을랭킹  · 활동왕
· 덱스퍼트란?  · TECBOX   · PRSBOX   · 이용안내  
· DEXT제품군  · 솔루션베이  · S/W & ESD 컴포넌트
· 프로그램베이
· LiveSeminar  · LiveConference
ASP.NET 포럼마을 입니다.
  마을등급 ASP.NET   이 마을은 포럼마을 입니다이 마을은 자유가입제 마을 입니다 마을소개 페이지로 이동 전입신청
마을촌장촌장 서학수 주민 3408 since 2006-12-28
우리마을 공지사항
질문&답변
강좌&팁
자유게시판
자료실
앨범
개인게시판
마을 게시판
등록된 마을 게시판이
없습니다.
랑데브 게시판
칼럼 게시판
개발자 고충상담
Dev Talk
자유토론방
벼룩시장
재나미 우스개
구인/프로젝트 정보
사람인 채용 게시판
  고객지원 게시판
마이 데브피아
 나의 e-Money 내역
 활동왕 My Page
 스크랩한 게시글보기
 쪽지관리
 주소록관리

 강좌&팁
 AJAX을 이용한 실시간 쪽지 구현..  | Web Form 2006-03-21 오전 1:29:03
 umjunil  umjunil님께 메시지 보내기umjunil님을 내 주소록에 추가합니다.umjunil님의 개인게시판 가기 번호: 586  / 읽음:8,846

아직 초보입니다. 비동기 호출에 대해서 공부하면서 AJAX을 알게 되었어요.

아직 AJAX을 모르는 초보 개발자에 대한 짧은 강좌입니다^^ 이쁘게 봐주세요..

 

※ AJAX.DLL을 참조 하셔야 합니다.

 

 web.config에 다음을 추가합니다.
<httpHandlers>
    <add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax" />
    </httpHandlers>

다음의 스크립트를 추가합니다.
<script> 
 setTimeout("memocheck()",3000);     //3초마다 쪽지함을 검색한다.
 
 function memocheck()
 {
   var c=Right.MemoCheck();     //AJAX으로 서버의 함수를 호출한다.
   if(c.value>0)                        // 내 쪽지함에 쪽지가 있다면..
   {                                        // 팝업창을 연다.
    open('/community/mail.aspx?id=<%=userid%       >','','width=300,height=320,location=no,status=no,scrollbar=no');
   }
   else setTimeout("memocheck()",3000);
 }
</script>

어떤분은 임의로 사용자가 mail.aspx?id=xxxx 로 접근 할 경우 어떻게 하냐고, 보안에 대해서 질타를 받을 것같네요

이부분은 여러분이 해결해 보세요 .. 어렵진 않을 것 같네영^^;;;
쪽지가 도착했을 경우 팝업을 하구, 그렇지 않으면 계속 타이머를 동작한다.

위 스크립트 코드 비하인드:
[Ajax.AjaxMethod]
  public int MemoCheck()
  {
    ... 디비 연결
   string strcmd=string.Format("select count(*) from Mail where ID='{0}' and Send=0",Context.User.Identity.Name);
   cn.Open();
   SqlCommand cmd=new SqlCommand(strcmd,cn);

   try {

       int cnt=(int)cmd.ExecuteScalar();

       return cnt;

   }

   catch ( Exception e) { throw e; }

   finaly { 디비 닫기 } 
  }
위 코드는 자신의 ID로 내게 도착한 쪽지의 갯수를 리턴합니다.
Send가 0일 경우는 도착하지 않은 쪽지입니다. default값은 0 입니다.

private string userid;

private void Page_Load(object sender, System.EventArgs e)
  {

       userid=Context.User.Identity.Name;
       Ajax.Utility.RegisterTypeForAjax(typeof(Right));
  }
위 코드로 AJAX을 이용할 클래스를 페이지로드에서 등록해야 합니다. (저는 Right.ascx의 클래스이므로 Right를 등록했습니다)

쪽지함 팝업 스크립트:
<body MS_POSITIONING="FlowLayout" onunload="opener.setTimeout('memocheck()',3000);">
BODY에 다음과 같이 추가하여 쪽지함을 닫을경우 다시 부모창의 타이머를
동작 시킵니다.

도착한 쪽지가 있어 팝업창이 열릴경우 Send필드는 1(true)로 업데이트 필수~~

 

쪽지함 테이블입니다.
create table Mail

(

    Num int identity(1,1) primary key not null,

    ID varchar(20) not null,

    Title varchar(50) not null,

    Content text not null,

    PostDate datetime not null default getdate(),

    PostIP varchar(15) not null,

    FromID varchar(20) not null,

    MailRead bit default 0,

    Send bit default 0

)

go

짧은 실력이나마, 제가 C#에 입문할때의 구현하고 싶은건 많지만,
그 갑갑한(?ㅋ) 기분으로 등록해 봤어영^^ 귀엽게 봐주세영~~^^

요걸 어케 응용할까 하구 지금은 채팅 로직을 공부해 보고 있어여~

좋은 정보 다함께 공유합니다^^

[코멘트] 좋음
2006-03-22 10:45
 blu3mun  blu3mun님께 메시지 보내기blu3mun님을 내 주소록에 추가합니다.blu3mun님의 개인게시판 가기 
다들 아시겠지만.. AJAX.dll과 더 많은 예제들은 아래 사이트에서 얻을수 있습니다.
http://ajax.schwarz-interactive.de/csharpsample/default.aspx
저장 취소
코멘트쓰기
  좋음   놀람   궁금   화남   슬픔   최고   침묵   시무룩   부끄럼   난감
* 코멘트는 500자 이내(띄어쓰기 포함)로 적어주세요.
목록 보기   지금 보고 계시는 글을 회원님의 my Mblog >> 스크랩에 넣어두고 다음에 바로 보실 수 있습니다.  
회사소개  |   개인정보취급방침  |  제휴문의  |   광고문의  |   E-Mail 무단수집거부  |   고객지원  |   이용안내  |   세금계산서
사업자등록번호 안내: 220-81-90008 / 통신판매업신고번호 제 2017-서울구로-0055호 / 대표: 홍영준, 서민호
08390, 서울시 구로구 디지털로32길 30, 1211호 / TEL. 02_6719_6200 / FAX. 02-6499-1910
Copyright ⓒ (주) 데브피아. All rights reserved.