joinview.jsp
<body>
<form name="joinForm" action="join_db.jsp" method="post">
<fieldset>
<legend>회원가입</legend>
<span id="txt"></span>
<p>
<input name="userid" placeholder="아이디를 입력하세요">
<input type="button" value="중복체크" onclick="checkId()">
</p>
<p>
<input name="userpw" type="password" placeholder="비밀번호를 입력하세요">
</p>
<p>
<input name="username" placeholder="이름을 입력하세요">
</p>
<p>
<input type="submit" value="회원가입">
</p>
</fieldset>
</form>
</body>
<script>
function checkId(){
const userid = document.joinForm.userid;
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState == XMLHttpRequest.DONE){
if(xhr.status == 200){
let txt = xhr.responseText;
txt = txt.trim();
if(txt == "O"){
txtTag.innerHTML = "사용할 수 있는 아이디입니다!";
}
else{
txtTag.innerHTML = "중복된 아이디가 있습니다!";
}
}
}
xhr.open("POST", "checkId_db.jsp");
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xhr.send("userid="+userid.value);
}
xhr.open("GET","checkId_db.jsp?userid="+userid.value);
xhr.send();
}
</script>
checkId_db.jsp
<%@ include file="DBConnection.jsp"%>
<%
Connection conn = getConnection(); //db연결
String userid = request.getParameter("userid"); //userid 데이터 추출
//System.out.println(userid); //콘솔 확인용
String sql = "select * from t_user where userid=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, userid);
ResultSet rs = ps.executeQuery();
//중복된 userid가 있으면 실패 => X 출력 / 없으면 성공 => O 출력
if(rs.next()){
out.print("X");
}
else{
out.print("O");
}
%>
참고) Ajax 처리 과정
Ajax 요청시 xhr 객체는 각 상태별로(상황별로) readyState가 바뀐다.
처음에는 0(XMLHttpRequest.UNSET, 보내지 않음)
open 메소드를 호출하는 순간 1(XMLHttpRequest.OPENED)로 바뀜
send 호출시 순차적으로 2(XMLHttpRequest.HEADERS_RECEIVED),
3(XMLHttpRequest.LOADING),
4(XMLHttpRequest.DONE)로 바뀐다.
최종적으로 readyState가 4가 된다면 (통신이 완료되었다면)
상태코드(xhr.status)가 성공을 가리키는 200이나 201일 때 응답을 확인한다.
응답된 데이터로 DOM을 활용하여 알맞게 페이지를 변화시켜준다.