1. 계산기 : 자바스크립트만 이용
○ 새로고침 없이 밑에 값만 바뀌도록 한다
○ 실행화면
① test1.jsp
[ body부분 ]
<body>
<input type="text" id="su1">
<select id="oper">
<option value="hap">더하기</option>
<option value="sub">빼기</option>
<option value="mul">곱하기</option>
<option value="div">나누기</option>
</select>
<input type="text" id="su2">
<input type="button" value="=" onclick="sendIt();">
<br/><br/>
//결과값이 출력되는 부분
<div id="resultDIV" style="display: none"></div>
</body>
[ script부분 ]
▶sendIt() 함수
○ onreadystatechange : 서버가 작업을 마치고 클라이언트에게 정보를 돌려줄 때 자동으로 실행할 메소드를 지정한다
○ xmlHttp.open("GET",query,true);
- 보내기 위한 준비작업을 하는 부분
- true : 비동기방식 / false : 동기바이
- GET방식으로 querry를 비동기방식으로 보낸다
○ xmlHttp.send(null);
- 보내는 부분
- open에서 post방식으로 보내는경우에는 뒤에 값을 넣어준다
xmlHttp.send(querrt);
- get방식일 경우에는 뒤에 null값을 적는다
▶callback()함수
○ 여기서 실행해도 되지만, 코드가 길어질 수 있어 따로 함수를 만들어서 실행한다.
○ 데이터가 정상적으로 도착했는지만 검증
○ xmlHttp.readyState==4
- 모든 데이터를 다 받으면 resdyState의 값은 4이다.
- 0 : XMLHttpRequest 객체를 생성
- 1 : 요청할 페이지 정보를 설정
- 2 : send()메소드로 요청을 보냄
- 3 : 서버에서 응답이 오기 시장
- 4 : 서버 응답이 완료
○ xmlHttp.status==200
- 서버로부터 받은 응답 코드를 나타내는 숫자
- 200 : 정상적으로 응답을 받은 경우
- 404 : 페이지를 찾지 못한 경우
▶printData() 함수
○ 데이터를 xml형식으로 받는다
○ responseXML : 넘어온 데이터를 xml형식으로 받는다
○ responseHTML : 넘어온 데이터를 텍스트 문자열로 반환하여 받는다
<script type="text/javascript">
function sendIt(){
//XMLHttpRequest 생성
xmlHttp = createXMLHttpRequest();
var query = "";
var su1 = document.getElementById("su1").value;
var su2 = document.getElementById("su2").value;
var oper = document.getElementById("oper").value;
query = "test1_ok.jsp?su1="+su1+"&su2="+su2+"&oper="+oper;
//onreadystatechange
// 작성위치는 상관 없다. 위에 적어도, 밑에 적어도 괜찮음
xmlHttp.onreadystatechange = callback;
xmlHttp.open("GET",query,true);
xmlHttp.send(null);
}
function callback() {
if(xmlHttp.readyState==4){
if(xmlHttp.status==200){
printData();
}
}
}
function printData() {
//넘어온 데이터중 root부분을 읽어서 result에 넣어둔다
var result = xmlHttp.responseXML.getElementsByTagName("root")[0];
//결과를 보여줄 위치의 객체를 생성
var out = document.getElementById("resultDIV");
out.innerHTML = "";
out.style.display = "";
//root에서 첫번째 값을 보여준다
out.innerHTML = result.firstChild.nodeValue;
}
</script>
② test1_ok.jsp
○ 결과만 돌려주기 때문에 HTML이 필요 없다
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
request.setCharacterEncoding("UTF-8");
String cp = request.getContextPath();
int su1 = Integer.parseInt(request.getParameter("su1"));
int su2 = Integer.parseInt(request.getParameter("su2"));
String oper = request.getParameter("oper");
int sum = 0;
if(oper.equals("hap"))
sum = su1 + su2;
else if(oper.equals("sub"))
sum = su1 - su2;
else if(oper.equals("mul"))
sum = su1 * su2;
else if(oper.equals("div"))
sum = su1 / su2;
StringBuffer sb = new StringBuffer();
sb.append("<?xml version='1.0' encoding='UTF-8'?>\n");
sb.append("<root>" + sum + "</root>");
/* 값 돌려주기 */
//xml형식으로 값을 돌려줌
response.setContentType("text/xml;charset=utf-8");
response.getWriter().write(sb.toString());
%>
③ createXMLHttpRequest 함수
○ ajaxUtlil.js 작성
○ IE별 작성 방법
- non IE : new XMLHttpRequest()
- IE 5.0 이후 : new ActiveXObject("Msxml2.XMLHTTP")
- IE 5.0 이전 : new ActiveXObject("Microsoft.XMLHTTP");
var xmlHttp;
function createXMLHttpRequest(){
if(window.XMLHttpRequest){
xmlHttp = new XMLHttpRequest();
} else if(window.ActiveXObject){
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
2. jQuery를 이용해 Ajax사용하기
① body
<body>
제목:<input type="text" id="subject"><br/>
내용:<input type="text" id="content"><br/>
<input type="button" id="sendButton" value="보내기">
<br/><br/><br/>
<div id="resultDIV"></div>
</body>
② script
▶ $.ajax({ });
○ ajax를 실행하는 부분
○ type : get방식인지 post방식인지 작성
○ url : 보낼 페이지
○ data : 보낼 데이터
○ dataType : 보낼 데이터의 타입 ( xml, json..)
○ success : 데이터가 정상적으로 돌아올 시 실행
○ beforeSend : 데이터를 넘어가기 전에 처리해줄 코드
- 사용자 정의 함수를 작성
- false값이 넘어오면 위에 있는 작업을 멈춘다.
- 항상 마지막에는 true값이 와야한다. true값이 오지 않으면 더 이상 실행되지 않는다
<script type="text/javascript">
$(function(){
$("#sendButton").click(function(){
var params = "subject=" + $("#subject").val() + "&content=" + $("#content").val();
//보내는 작업
$.ajax({
type:"post",
url:"test2_ok.jsp",
data:params,
dataType:"xml",
success:function(args){
//xml에서 데이터 읽기
//거의 대부분 xml이나 텍스트로 돌아온다.
//넘어온 데이터에서 status를 찾아서 읽음
//each : 반복문
$(args).find("status").each(function(){});
var str = "";
$(args).find("record").each(function(){
var id = $(this).attr("id"); //먼저 1, 다음에 2
var subject = $(this).find("subject").text();
var content = $(this).find("content").text();
str += "id:" + id +
", subject:" + subject +
", content:" + content + "<br/>";
});
$("#resultDIV").html(str);
},
//showRequest : 사용자 정의 함수
beforeSend:showRequest,
error:function(e){
alert(e.responseText);
}
});
});
});
function showRequest(){
var flag = true;
if(!$("#subject").val()){
alert("제목을 입력하세요");
$("#subject").focus();
return false;
}
if(!$("#content").val()){
alert("내용을 입력하세요");
$("#content").focus();
return false;
}
return flag;
}
</script>
3. 다른 방법으로 아이디와 패스워드 전송 및 지우기
○ 실행화면
○ 공통부분(body)
<body>
아이디:<input type="text" id="userId"/><br/>
패스워드:<input type="text" id="userPwd"/><br/>
<button id="saveButton">전송</button>
<button id="clearButton">지우기</button>
<br/>
<br/>
<div id="resultDIV"></div>
</body>
○ test3_ok.jsp /test4_ok.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
request.setCharacterEncoding("UTF-8");
String cp = request.getContextPath();
String userId = request.getParameter("userId");
String userPwd = request.getParameter("userPwd");
%>
아이디:<%=userId %><br/>
패스워드:<%=userPwd %><br/>
3-1. jQuery로만 작성
① test3.jsp
○ script
- GET과 POST동시에 사용불가
- 둘 중 하나만 사용해야 한다
<script type="text/javascript">
$(document).ready(function(){
$("#saveButton").click(function(){
var value1 = $("#userId").val();
var value2 = $("#userPwd").val();
//GET
// userId에 value1값을, userPwd에 value2값을 넣는다
$.get("test3_ok.jsp",{userId:value1,userPwd:value2},function(args){
$("#resultDIV").html(args);
});
//POST
$.post("test3_ok.jsp",{userId:value1,userPwd:value2},function(args){
$("#resultDIV").html(args);
});
});
$("#clearButton").click(function(){
$("#resultDIV").empty();
});
});
</script>
3-2. jQuery와 ajax 사용
① test4.jsp
○ script
<script type="text/javascript">
$(document).ready(function(){
$("#saveButton").click(function(){
var params = "userId=" + $("#userId").val() +
"&userPwd=" + $("#userPwd").val();
$.ajax({
type:"POST",
url:"test4_ok.jsp",
data:params,
success:function(args){
$("#resultDIV").html(args);
},
beforeSend:showRequest,
error:function(e){
alert(e.responseText);
}
});
});
$("#clearButton").click(function(){
$("#resultDIV").empty();
});
function showRequest(){
var flag = true;
if(!$("#userId").val()){
alert("아이디를 입력!!");
$("#userId").focus();
return false;
}
if(!$("#userPwd").val()){
alert("패스워드를 입력!!");
$("#userPwd").focus();
return false;
}
return flag;
}
});
</script>
4. json(Map-key:value)을 이용하여 ajax구현
① test5.jsp
<script type="text/javascript" src="<%=cp%>/data/js/jquery-3.3.1.min.js"></script>
<script type="text/javascript">
$(function(){
$("#sendButton").click(function(){
var params = "userId=" + $("#userId").val() + "&userPwd=" + $("#userPwd").val();
$.ajax({
type:"POST",
url:"test5_ok.jsp",
data:params,
dataType:"json",
success:function(args){
var str = "";
//json방식으로 오는 데이터를 반복문으로 풀어서 보여준다
for(var i=0;i<args.length;i++){
str += "id=" + args[i].id;
str += ",userId=" + args[i].userId;
str += ",userPwd=" + args[i].userPwd + "<br/>";
}
//반복문에서 푼 데이터를 출력
$("#resultDIV").html(str);
},
error:function(e){
alert(e.responseText);
}
});
});
});
</script>
② test5_ok.jsp
○ json 방식 : { }로 묶어준다
- key : value 형태
- json방식은 {Key : Value} 형식으로 데이터가 저장된다.
- 각각의 값들은 큰따옴표로 묶여있어야 한다.
- {"id":"1","userId":"Lee","userPwd":"123"}
- 전체데이터는 [ ](대괄호)로 묶어줘야한다.
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
request.setCharacterEncoding("UTF-8");
String cp = request.getContextPath();
String userId = request.getParameter("userId");
String userPwd = request.getParameter("userPwd");
String result = "";
//임의의 데이터를 3번
//실제로 여기에 있는 데이터는 xml에서 데이터를 가지고 오거나(공용데이터)
//데이터베이스에서 데이터를 읽어온다
for(int i=1;i<=3;i++){
result += "{\"id\":\""+i ;
result += "\",\"userId\":\""+userId;
result += "\",\"userPwd\":\""+userPwd + "\"},";
}
result = result.substring(0,result.length()-1);
result = "["+result+"]";
out.println(result);
%>
▶ 최종 result
[ {"id":"1","userId":"Lee","userPwd":"123"}, {"id":"1","userId":"Lee","userPwd":"123"}, {"id":"1","userId":"Lee","userPwd":"123"} ]
'STUDY > jQuery & Ajax' 카테고리의 다른 글
자바스크립트 객체 : JSON 표기법 (0) | 2019.04.02 |
---|---|
Document Object Model과 XML (0) | 2019.04.02 |
자바스크립트로 Ajax 구현 (0) | 2019.04.01 |
jQuery (0) | 2019.03.29 |
Ajax (0) | 2019.03.29 |
댓글