View

비동기 방식으로 INPUT 에 있는 ID 와 DB 저장 바로 비교

우선 기본적으로 익힐 때 가장 머리 아팠었던 Ajax 부분이다.

천천히 코드를 따라 가 보자.

 

우선 DAO에서 confirm 메서드를 하나 만들었다.

스프링을 다 익히고 나니 DAO 란 표현이 좀 낯선 건 여담.......

	public int confirmID(String memid){
		int x=-100;
		
		try{
			con=getCon();
			pstmt=con.prepareStatement("select memId from tbmember where memId=?");
			pstmt.setString(1, memid);
			
			rs=pstmt.executeQuery();
			
			if(rs.next()){
				x=1; //사용 중인 아이디
			}else{
				x=0; //사용 가능한 아이디
			}//else-end
			
		}catch(Exception ex){
			System.out.println("confirmID() 예외: "+ex);
		}finally{
			try{
				if(rs!=null){rs.close();}
				if(pstmt!=null) {pstmt.close();}
				if(con!=null){con.close();}
			}catch(Exception ex2){}
		}//finally-end
		return x;
	}//confirmID end

우선 반환해야 하는 x를 오류로도 뜰 수 없는 숫자(-100) 로 설정해 두고, 쿼리를 돌려 DB 에 해당 데이터(memId)가 있는지 확인한다.

여기에서의 memId 는 사용자가 입력한 input 으로 들어오는 값이다.

예를 들어, 내가 회원가입에서 'hyper' 를 쳤다면, hyper 가 해당 메서드의 매개변수로 들어오는 것이다.

 

그리고 쿼리는 이렇게 돌아가게 된다.

select memId
from tbmember 
where memId='hyper';

결과 값을 받는 변수로 rs를 선언했고, 쿼리 실행 구문은 pstmt.executeQuery();  문장이다.

그리고 if 문으로 rs 값이 있는지 없는지 확인하는데, rs.next()의 뜻은 데이터베이스를 한 번 스윽 스캔해서 넥스트에 값이 있는지 없는지 확인하게끔 해 준다.

 

그래서 사용이 불가능한 값, 즉 DB 에 있는 값은 x=1 로 주고, DB 에 없는 값, 사용이 가능한 아이디는 0 으로 주어 리턴한다. 

 

그리고 confirmID.jsp 를 만들어 해당 값을 json 타입으로 넘겨 준다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    import="member.*"
    %>
<%-- confirmID.jsp --%>
<%
String memId=request.getParameter("memId");
MemberDAO dao=MemberDAO.getInstance();
int x=dao.confirmID(memId);
%>
{
"x":<%=x%>
}

이렇게 작성해 두면 memID 를 FORNT input 에서 받고, dao 에 있는 메서드 (위에서 작성한 if 문)에 memId 를 매개변수로 넘겨 데이터 유효성을 체크하여 x 값을 반환해 준다.

그냥 쉽게 말해서 사용이 가능하면 x 값이 0 이 되고, 사용이 불가능하면 1 이 될 것이다.

 

그러고서 본격적으로 프론트로 넘어와야 한다.

 

우선 FROM 아래에 잘못된 ID 데이터가 넘어가지 않도록 디폴트로 false 값을 심어 준다.

<input type="hidden" name="idChkResult" id="idChkResult" value="false">

그리고 나는 테이블로 프론트를 구성했기 때문에 <tr> <td> 등의 테이블 태그가 보일 텐데, 해당 부분을 차치하고 속성 옵션을 보자.

	<tr>
		<td>ID</td>
		<td>
			<input type="text" name="memId" id="memId" size="30" 
          		  placeholder="아이디를 입력해 주세요." class="input_id"><br>
			<font id="checkId" size="2"></font>
		</td>
	</tr>

name과 ID를 memId로, class 를 input_id 로 둔 것을 확인하면 된다.

또한 DB에 데이터가 있는지, 없는지에 따라 나타낼 문장을 font id=checkID 로 주어 나타낼 것이다.

 

JAVASCRIPT 구성

$(function(){
	$('#memId').on('blur',function(){
		 if($('#memId').val()==''){
			  $('#checkId').html('아이디를 입력하세요.');
			  $('#checkId').attr('color','red');
			  $('#memId').focus();
			  return false;
							  
			  }else{
				  $.ajax({
					  type:"POST",
					  url:"confirmID.jsp",
					  data:"memId="+$('#memId').val(),
					  dataType:"JSON",
					  success:function(data){
					  if(data.x==1){
						  $('#checkId').html('사용할 수 없는 아이디입니다.');
						  $("#idChkResult").val("false");
						  $('#checkId').attr('color','red');
						  $('#memid').foucs();
					  }else{
						  $('#checkId').html('사용 가능한 아이디입니다.');
						  $("#idChkResult").val("true");
						  $('#checkId').attr('color','green');
						  $('#idck').val('true');
						  $('#memPw').focus();
					  }
					  }//success-end
				  })//ajax-end
               }//else-end
	})//inner function-end
})//function-end

우선 제일 else 위에 있는 구문은 ID 를 입력하지 않았을 경우 보이게 만드는 요소이니 넘어가자.

url 로 json 데이터를 받아야 하는 confirmID.jsp 를 작성해 준다.

또한 data 부분은 input id=memID 에 적혀진 값으로 confrimID.jsp 로 넘어갈 것이다.

 

그러고서 해당 값이 if 문 메서드에 들어가 DB에 있는지 없는지 확인한 후, (DAO 에 작성된 메서드)

DB에 값이 있으면 1, 없으면 0 으로 반환해 줄 것이다.

 

값이 있으면 사용하지 못하는 아이디이므로 data.x==1 일 경우 <font id="checkID">  는 사용할 수 없는 아이디인 것을 표기해 주고, data.x 가 1 이 아닐 경우 사용 가능한 아이디라 표현해 준다.

 

그리고 form 아래에 #idcheckResult 값을 false 로 잡아 두었기 때문에, 만약 사용 가능한 아이디라면 true 로 밸류를 변경해 준다.

 

이것으로 Ajax 즉시 비교는 끝!

Share Link
reply
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31