반응형
- 비동기란?
- 웹에서 특별한 상황이 있다.
- 웹페이지가 있는데. 버튼이 여러개다. db를 다녀와야할 버튼이
- db를 다녀오면 초기화가 된다. 웹페이지에 있는 정보가 지워진다.
- db를 다녀와도 깜박이지 않아야 한다.
- 버튼을 누를때 페이지를 더 만드는 것이다.
- 프로그램을 더 켜는 거다.
- 회원가입은 이야기가 다르다.
- 비동기를 사용하는 상황
- 1. 현재 페이지에. db를 다녀오는 버튼이 여러개 있는 경우 .
- 2. 지워지면 안되는 내용이 있는 경우
- 그래서 게시판은 비동기를 사용할 필요가 없는것.
- 아이디 중복확인.
- db에 다녀와서 있는지 없는지 확인하면
- 회원가입에 적은 내용들이 전부 사라지는 거다. 그래서 비동기가 필요한것
- 비동기를 사용하는 경우는 거의 드물다.
- 비동기 사용하는 법
- 1번. 제이쿼리 라이브러리 하기
- <script src="https://code.jquery.com/jquery-latest.min.js"></script>
- 2번.
- $.ajax( ) ;
- 비동기 함수
- 옵션 넣기
- $.ajax( { 1, 2, 3, 4, 5 });
- $.ajax ( {
- type : "post" ,
- url : "url" , //다녀올 곳
- data : { 키 : 벨류 , 키 : 벨류 ,.... } //request
- success : function ( result) { } // 성공하면 이곳으로 들어온다.
- result에 url의 html이 담겨져서 들어옴
- error : function ( ) { } //실패하면 들어온다.
- 실패하면 alert ( " 실패 " );
- });
- $.ajax( ) ;
- 1번. 제이쿼리 라이브러리 하기
- D02_session_async
- 01_비동기ajax
- 01_testForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
table, tr, td {
border: 1px solid black;
border-collapse: collapse;
}
#content-join {
margin: 0 auto;
width: 600px;
}
#title, #joinPro {
text-align: center;
}
</style>
</head>
<body>
<script src="https://code.jquery.com/jquery-latest.min.js"></script>
<!-- 비동기 라이브러리 사용 -->
<table id="content-join">
<tr>
<td colspan="3" id="title"><h2>테스트1</h2></td>
</tr>
<tr>
<td rowspan="2">아이디</td>
<td><input id="input-memberId" type="text" placeholder="아이디를 입력해주세요" value="test1234"></td>
<td><button id="button-memberIdCheckPro">중복확인</button></td>
</tr>
<tr>
<td id="msg-memberId" colspan="2"></td>
</tr>
</table>
<script>
/* 아이디 유효성 검사 */
let inputMemberIdInput = (event) => {
let $msgMemberId = document.querySelector("#msg-memberId");
let regExp = RegExp(/^[A-Za-z0-9_\-]{6,16}$/);
if(regExp.test($inputMemberId.value)) {
$msgMemberId.innerHTML = "";
} else {
$msgMemberId.innerHTML = "<span style='color:#F03F40; font-size:12px;'>6자 이상 16자 이하의 영문 혹은 영문과 숫자를 조합</span>";
}
}
/* 아이디 중복검사 */
let buttonMemberIdCheckProClick = (event) => {
let regExp = RegExp(/^[A-Za-z0-9_\-]{6,16}$/);
if($inputMemberId.value == "") {
alert("아이디를 입력해주세요.");
$inputMemberId.focus();
} else if(!regExp.test($inputMemberId.value)) {
alert("6자 이상 16자 이하의 영문 혹은 영문과 숫자를 조합");
$inputMemberId.value = "";
$inputMemberId.focus();
} else {
idCheck = true;
$.ajax({
type: "post",
url: "01_testPro.jsp",
data: {
id: $inputMemberId.value
},
success: function(result) {
console.log("result = " + result); // html 파일이 문자열로 넘어온다.
alert(result);
},
error: function() {
alert("joinForm error");
}
});
}
}
//--------------------------------------------------------------------------------------
let $inputMemberId = document.querySelector("#input-memberId");
$inputMemberId.addEventListener("input", inputMemberIdInput);
let $buttonMemberIdCheckPro = document.querySelector("#button-memberIdCheckPro");
$buttonMemberIdCheckPro.addEventListener("click", buttonMemberIdCheckProClick);
</script>
</body>
</html>
- 01_testPro.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
여기는 testForm 입니다.
</body>
</html>
- 02_testForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
table, tr, td {
border: 1px solid black;
border-collapse: collapse;
}
#content-join {
margin: 0 auto;
width: 600px;
}
#title, #joinPro {
text-align: center;
}
</style>
</head>
<body>
<script src="https://code.jquery.com/jquery-latest.min.js"></script>
<table id="content-join">
<tr>
<td colspan="3" id="title"><h2>테스트2</h2></td>
</tr>
<tr>
<td rowspan="2">아이디</td>
<td><input id="input-memberId" type="text" placeholder="아이디를 입력해주세요" value="test1234"></td>
<td><button id="button-memberIdCheckPro">중복확인</button></td>
</tr>
<tr>
<td id="msg-memberId" colspan="2"></td>
</tr>
</table>
<script>
/* 아이디 유효성 검사 */
let inputMemberIdInput = (event) => {
let $msgMemberId = document.querySelector("#msg-memberId");
let regExp = RegExp(/^[A-Za-z0-9_\-]{6,16}$/);
if(regExp.test($inputMemberId.value)) {
$msgMemberId.innerHTML = "";
} else {
$msgMemberId.innerHTML = "<span style='color:#F03F40; font-size:12px;'>6자 이상 16자 이하의 영문 혹은 영문과 숫자를 조합</span>";
}
}
/* 아이디 중복검사 */
let buttonMemberIdCheckProClick = (event) => {
let regExp = RegExp(/^[A-Za-z0-9_\-]{6,16}$/);
if($inputMemberId.value == "") {
alert("아이디를 입력해주세요.");
$inputMemberId.focus();
} else if(!regExp.test($inputMemberId.value)) {
alert("6자 이상 16자 이하의 영문 혹은 영문과 숫자를 조합");
$inputMemberId.value = "";
$inputMemberId.focus();
} else {
idCheck = true;
$.ajax({
type: "post",
url: "02_testPro.jsp",
data: {
id: $inputMemberId.value
},
success: function(result) {
/*
html 이 통채로 넘어오기때문에 원하는 데이터를 잘 파싱해야한다.
*/
console.log(result);
let str = '<p id="check">';
let length = str.length;
let startIndex = result.indexOf(str);
//<p id="check">여기의 <의 인덱스
// 자른것
//substr < 의 인덱스 + <p id="check"> 길이를 잘라내면 1, -1 찾아올 수 있다.
let checkValue = result.substr(startIndex + length);
// 1, -1 이 들어온다.
console.log("result = " + result);
console.log("length = " + length);
console.log("startIndex = " + startIndex);
console.log("checkValue = " + checkValue);
// 아이디가 중복되면
if(checkValue.trim() === "-1") {
alert("중복된 아이디입니다.");
$inputMemberId.value = "";
$inputMemberId.focus();
} else {
alert("사용할 수 있는 아이디입니다.");
}
},
error: function() {
alert("joinForm error");
}
});
}
}
//--------------------------------------------------------------------------------------
let idCheck = false;
let emailCheck = false;
let $inputMemberId = document.querySelector("#input-memberId");
$inputMemberId.addEventListener("input", inputMemberIdInput);
let $buttonMemberIdCheckPro = document.querySelector("#button-memberIdCheckPro");
$buttonMemberIdCheckPro.addEventListener("click", buttonMemberIdCheckProClick);
</script>
</body>
</html>
- 02_testPro.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
String id = request.getParameter("id");
/*
0 1 -1 등으로 원하는 결과를 체크한다.
우리는 아래 p태그로 확인할예정이며, 태그나 값은 자유로 설정한다.
*/
int check = 1;
if(id.equals("test1234")){
check = -1; //아이디가 있으면 -1
}else{
check = 1;
}
%>
<p id="check"><%= check %>
<!-- 확인용 -->
<!--<p id="check"> 을 잘라내는것 -->
- 02_비동기회원가입
반응형
'코딩 > 4-JSP & SERVLET' 카테고리의 다른 글
| D04_session_API => 01_통계 (3) | 2025.07.09 |
|---|---|
| D03_session_upload (3) | 2025.07.07 |
| C22_dao_board_re (0) | 2025.07.03 |
| C12_db_gisatest => 01_골프장 (1) | 2025.06.30 |
| C02_session_cart (0) | 2025.06.30 |