//Google AdSense

ajaxEx01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>유효성 검사 + ajax 아이디 중복 검사</title>
<script type="text/javascript" src="<%=request.getContextPath()%>/resource/js/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
	/*
		제출실습1. '성명, 아이디, 패스워드, 패스워드 확인, 이메일, 성별'을
		유효성 검사를 하는 코드를 작성하고, 아이디는 아이디 중복검사를 하도록 하여라.
		(아이디 중복검사 ajax : 중복검사하는 jsp 페이지는 직접 만들고 작성하시오.)
	*/
	$(function() {
		$('#btn').click(function() {
			var valName = $('#name').val();
			var valId = $('#id').val();
			var valPass = $('#pass').val();
			var valCPass = $('#cPass').val();
			var valEmail = $('#email').val();
			var idCheck = $('#idCheck').attr('idCheck');
			
			if(valName == null || valName == undefined || valName == ""){ alert('성명을 입력해주세요.'); $('#name').focus(); return;} 
			if(valId == null || valId == undefined || valId == ""){ alert('아이디를 입력해주세요.'); $('#id').focus();  return;}
			if(idCheck == "" || idCheck == "N"){alert('아이디 중복확인를 해주세요'); $('#idCheck').focus(); return;}
			if(valPass == null || valPass == undefined || valPass == ""){ alert('패스워드을 입력해주세요.'); $('#pass').focus(); return;} 
			if(valCPass == null || valCPass == undefined || valCPass == ""){ alert('패스워드 확인을 입력해주세요.'); $('#cPass').focus(); return;} 
			if(valPass != valCPass){ alert('패스워드와 패스워드 확인이 같지 않습니다.'); $('#pass').val(""); $('#cPass').val(""); $('#pass').focus(); return;}
			if(valEmail == null || valEmail == undefined || valEmail == ""){ alert('이메일을 입력해주세요.'); $('#email').focus(); return;}
			if(!$('.gender').prop('checked')){ alert('성별을 체크해주세요.'); $('.gender')[0].focus(); return;}
			$('#login').submit();
		});
		
		$('#idCheck').click(function(){

				var valId = $('#id').val();	
				
				var request = $.ajax({
					url: "<%=request.getContextPath() %>/idcheck.jsp", //통신할 url
					method: "POST", //통신할 메서드 타입
					data: { id : valId }, //전송할 데이타
					dataType: "json"
				});	 
				
				request.done(function( data ) {
					console.log(data.result)
					if(data.result == 'Y'){
						$('#idCheck').attr('idCheck','Y');
						alert('사용 가능한 아이디입니다.');
					} else{
						$('#idCheck').attr('idCheck','N');
						alert('사용할 수 없는 아이디입니다.');
					}	
				});	 
				request.fail(function( jqXHR, textStatus ) {
				  alert( "Request failed: " + textStatus );
				});			
				
			});		
	})
	
</script>
</head>
<body>

	<form action="#" method="post" id="login">
		<table>
			<tr><td>성명</td><td><input type="text" id="name"></td><td></td></tr>
			<tr><td>아이디</td><td><input type="text" id="id"></td><td><button type="button" idCheck="" id="idCheck">아이디 중복확인</button></td></tr>
			<tr><td>패스워드</td><td><input type="password" id="pass"></td><td></td></tr>
			<tr><td>패스워드 확인</td><td><input type="password" id="cPass"></td><td></td></tr>
			<tr><td>이메일</td><td><input type="text" id="email"></td><td></td></tr>
			<tr><td>성별</td><td>남 <input type="radio" class="gender" name="gender" value="남">	여  <input type="radio" class="gender" name="gender" value="여"> </td><td></td></tr>
			<tr><td></td><td></td><td><button type="button" id="btn">회원가입</button></td><tr>
		</table>
	</form>
</body>
</html>

idcheck.jsp

<%@ page language="java" contentType="application/json; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="com.google.gson.Gson" %>
<%@ page import="java.util.*" %>
<%
/*
 	id001, id002, id003은 데이터베이스 조회 하에 존재하는 아이디라고 가정한다.
*/

Gson gson = new Gson();
Map map = new HashMap();

String id = request.getParameter("id");

if( !"".equals(id) && id != null){
	if("id001".equals(id) || "id002".equals(id) || "id003".equals(id)){
		map.put("result", "N");
	} else {
		map.put("result", "Y");}
}
String result = gson.toJson(map);
out.print(result);
%>

 


<풀이>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>유효성 검사 + ajax 아이디 중복 검사</title>
<style type="text/css">
	.input-group{margin-bottom: 10px;}
	.input-group label { 
		color: #424242; 
		font-size: 15px; 
		padding-right: 10px; 
	}
</style>
<script type="text/javascript" src="<%=request.getContextPath() %>/resource/js/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
	/*
		제출실습1. '성명, 아이디, 패스워드, 패스워드 확인, 이메일, 성별' 을
		유효성 검사를 하는 코드를 작성하고, 아이디는 아이디 중복검사를 하도록하여라.
		(아이디 중복검사 ajax : 중복검사하는 jsp 페이지는 직접 만들고 작성하시오.)			
	*/
	$(function(){
		
		/************************************************
		아이디 중복 체크 함수
		작성자 : 홍길동
		작성일 : 2020-04-08
		'아이디 중복검사', '회원가입' 버튼클릭시 같은 코드로 
		확인하도록 하기위해서 함수로 별도 제작
		2곳에서 사용하고 비동기화로 체크가 동시에 불가능하여
		동기화로  ajax 통신하도록 설정
		*************************************************/		
		var userIdCheck = function(){
			
			var userId = $('[name="userId"]').val();
			var getCheckData;
			
			//ajax 동기화
			var request = $.ajax({
				url: "ajaxIdCheck.jsp", //통신할 url
				method: "POST", //통신할 메서드 타입
				data: { userId : userId }, //전송할 데이타
				dataType: "json",
				async : false //동기화시키기
			});	 
			request.done(function( data ) {
				if(data != undefined && data != ''){
					//동기화임으로 getCheckData에 결과값 받아
					//아래 코드에서 처리 가능
					getCheckData = data;
				}
			});	 
			request.fail(function( jqXHR, textStatus ) {
			  alert( "Request failed: " + textStatus );
			});
			
			//동기화 방식으로 하여 결과값을 받아 올수 있어
			//getCheckData 데이타 체크
			if(getCheckData == undefined || getCheckData.result == 'Y'){
				alert('사용할 수 없는 아이디 입니다.');
				$('[name="idCheck"]').val('N');
				return true;
			}else{
				$('[name="idCheck"]').val('Y');
			}
			return false;
		}
		
		/************************************************
		유효성 검사 함수
		작성자 : 홍길동
		작성일 : 2020-04-08
		반복되는 작업을 최소화 하기위해서 함수로 유효성 검사 제작
		함수 리턴값이 true 일경우 에러  
		!!객체에 담긴 키 정의 내역
		1) target : 체크 대상
		2) compareTarget : 체크 대상의 값과 비교 할 대상 - 값이 있을 경우 target과 비교
		3) lenTarget : 데이타 갯수 체크 대상 - 값이 존재할 경우 length가 0이면 안됨
		4) msg : 에러 발생시 출력할 문구
		*************************************************/			
		var valueChecks = function(checkObj){
				
			var target = checkObj.target; //값 체크 대상
			var compareTarget = checkObj.compareTarget; //값과 일치 비교 대상
			var lenTarget = checkObj.lenTarget; //데이타 갯수 
			var msg = checkObj.msg; //에러 발생시 문구
			var isCheck = false; //정상일 경우 false 에러일경우 true 반환
						
			if(target != undefined){
				if(compareTarget != undefined){
					if(target.val() != compareTarget.val()){						
						alert(msg);
						compareTarget.val('')
						compareTarget.focus();
						isCheck = true;
					}
				}else if(lenTarget != undefined){
					if(lenTarget.length == 0){
						alert(msg);
						target.eq(0).focus();
						isCheck = true;
					}
				}else{
					if(target.val() == ''){						
						alert(msg);
						target.focus();
						isCheck = true;
					}						
				}
			}else{
				isCheck = true;
			}
			
			return isCheck;
		}
		
		//회원가입 클릭 이벤트
		$('#joinBtn').click(function(){	
			if(valueChecks({target : $('[name="userName"]'), 	msg : '회원명을 입력해주세요.'})) return;
			if(valueChecks({target : $('[name="userId"]'), 		msg : '회원아이디를 입력해주세요.'})) return;						
			if(valueChecks({target : $('[name="userPw"]'), 		msg : '패스워드를 입력해주세요.'})) return;			
			if(valueChecks({target : $('[name="userPw"]'), 		msg : '패스워드가 틀립니다.', compareTarget : $('[name="userPwCheck"]')})) return;
			if(valueChecks({target : $('[name="userEmail"]'), 	msg : '이메일을 입력해주세요.'})) return;
			if(valueChecks({target : $('[name="userGender"]'), 	msg : '성별을 입력해주세요.', lenTarget : $('[name="userGender"]:checked')})) return;
			if(valueChecks({target : $('[name="idCheck"]'), 	msg : '아아디 중복검사를 실행 해주세요.'})) return;	
			if(userIdCheck()) return;	//아이디 중복 검사 한번더 실시		
			$('#joinFrom').submit();
			
		});
		//아이디 중복검사 클릭 이벤트
		$('#userIdCheck').click(function(){
			if(!userIdCheck()){
				alert('사용할 수 있는 아이디 입니다.');
			}
		});
				
	});
</script>
</head>
<body>
	<form id="joinFrom" action="./ajaxEx01.jsp" method="post">
	
		<input type="hidden" name="idCheck">
		
		<div class="input-group">
			<label>회원명 </label>
			<input type="text" name="userName">
		</div>
		<div class="input-group">
			<label>아이디 </label>
			<input type="text" name="userId">
			<button type="button" id="userIdCheck">아이디 중복 검사</button>
			<div id="userIdMsg"></div>
		</div>
		<div class="input-group">
			<label>패스워드 </label>
			<input type="password" name="userPw">
		</div>
		<div class="input-group">
			<label>패스워드 확인 </label>
			<input type="password" name="userPwCheck">
		</div>
		<div class="input-group">
			<label>이메일 </label>
			<input type="text" name="userEmail">
		</div>
		<div class="input-group">
			<label>			
				<input type="radio" name="userGender" value="남">
				남
			</label>
			<label>			
				<input type="radio" name="userGender" value="여">
				여
			</label>
		</div>
		
		<button type="button" id="joinBtn"> 회원가입 </button>
	</form>
</body>
</html>

 

<%@ page language="java" contentType="application/json; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="com.google.gson.Gson" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%
	/*
		데이타 베이스에서 조회하였다는 가정하에
		아래 데이타 나열.
		나열된 데이타는 이미 존재하는 아이디
		id001, id002, id003
	*/	
	String userId = request.getParameter("userId");
	//Gson 인스턴스화(객체화)
	Gson gson = new Gson();		
	//Map을 객체화 하기
	Map map = new HashMap();
	if(
		   "id001".equals(userId) 
		|| "id002".equals(userId) 
		|| "id003".equals(userId)
		|| "".equals(userId)
		|| userId == null
	){		
		map.put("result", "Y");
	}else{
		map.put("result", "N");
	}
	String result = gson.toJson(map);
	out.print(result);
%>

 

'JavaScript' 카테고리의 다른 글

[BootStrap] grid / responsive-utilities  (0) 2020.04.08
[BootStrap] components / modals  (0) 2020.04.08
[JQuery] ajax 실습  (0) 2020.04.07
[JQuery + Ajax] html, json call / gson  (0) 2020.03.31

+ Recent posts