JavaScript - AJAX 통신을 이용한 아이디 중복체크

박선규's avatar
Feb 26, 2024
JavaScript - AJAX 통신을 이용한 아이디 중복체크
 
📌
어떤 홈페이지든 아이디 중복체크는 기본이다. 아이디를 입력했을 때 바로 확인할 수 있어야하는데 이것을 AJAX 통신을 통해서 구현할 수 있다.

버튼을 클릭하여 중복 체크하기

 

JoinForm

<div class="container p-5"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" /> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"> <!-- 요청을 하면 localhost:8080/join POST로 요청됨 username=사용자입력값&password=사용자값&email=사용자입력값 --> <div class="card"> <div class="card-header"><b>회원가입을 해주세요</b></div> <div class="card-body"> <form action="/join" method="post" enctype="application/x-www-form-urlencoded"> <div class="mb-3"> <input id="username" type="text" class="form-control" placeholder="Enter username" required> <button type="button" class="btn-warning" onclick="check()">아이디 중복체크</button> </div> <div class="mb-3"> <input type="password" class="form-control" placeholder="Enter password" name="password" required> </div> <div class="mb-3"> <input type="email" class="form-control" placeholder="Enter email" name="email" required> </div> <button type="submit" class="btn btn-primary form-control">회원가입</button>
notion image
📌
아이디 중복 체크 버튼을 누를 시 check( )가 실행 돼서 중복체크 할 수 있도록 만든다.
 

API 컨트롤러

@GetMapping("/api/username-same-check") public @ResponseBody ApiUtil<?> usernameSameCheck(String username){ //@ResponseBody 데이터 리턴을 위해 User user= userRepository.findByUsername(username); if(user==null){ return new ApiUtil<>(false); // 아이디가 없다면 false를 바디에 담는다. }else { return new ApiUtil<>(true); // 아이디가 이미 존재한다면 true 를 바디에 담는다. } }
 
 

ApiUtil

package com.example.springblog._core.util; import lombok.Data; @Data public class ApiUtil<T> { private Integer status ; private String msg ; private T body; public ApiUtil(T body) { // 통신 성공시 this.status = 200; this.msg = "성공"; this.body = body; } public ApiUtil(Integer status, String msg) { // 통신 실패 시 this.status = status; this.msg = msg; this.body = null ; } }
 

AJAX 통신

<script> let isSameCheck = false ; function check(){ // 버튼 실행시 발동 let username =$("#username").val(); // 입력 필드의 값을 username 변수에 저장 $.ajax({ // 서버에 비동기 GET 요청 type:"get", url:"/api/username-same-check", // 컨트롤러의 주소와 동일하게 작성 data: {username: username} // 요청데이터는 username }).done((res)=>{ if(res.body==false){ // api 통신으로 받은 body 데이터를 가져온다. isSameCheck = true; alert("사용가능한 아이디입니다.") }else{ isSameCheck = false; alert("아이디가 중복되었습니다.") } }).fail((res)=>{ alert(res.responseJSON.msg); }); } </script>
 
notion image
notion image
📌
DB에 존재 하지 않는 아이디를 누를 시 사용 가능하다는 팝업을 띄운다.
 
notion image
notion image
📌
DB에 존재 하는 아이디를 입력하면 중복 됐다는 팝업이 뜬다.
 
 

onchange 이벤트 사용

<div class="mb-3"> <input id="username" type="text" class="form-control" placeholder="Enter username" name="username" onchange="check()" required> </div>
📌
onclick 대신 onchange를 사용해 사용자가 TAB버튼을 누를 시 실행 되게 만든다.
 

AJAX 통신

<script> let isSameCheck = false ; function check(){ // 버튼 실행시 발동 let username =$("#username").val(); $.ajax({ type:"get", // GET요청 url:"/api/username-same-check", // 컨트롤러의 주소와 동일하게 작성 data: {username: username} }).done((res)=>{ console.log(res); if(res.body==false){ // api 통신으로 받은 body 데이터를 가져온다. isSameCheck = true; alert("사용가능한 아이디입니다.") }else{ isSameCheck = false; alert("아이디가 중복되었습니다.") } }).fail((res)=>{ alert(res.responseJSON.msg); }); } </script>
notion image
notion image
📌
DB에 존재 하지 않는 아이디를 입력하고 TAB과 같은 동작을 했을 때 사용 가능하다는 팝업을 띄운다.
 
notion image
notion image
📌
DB에 존재 하는 아이디를 입력하고 TAB과 같은 동작을 했을 때 중복 됐다는 팝업이 뜬다.
Share article

p4rksk