본문 바로가기

[Ajax] Ajax 적용하기 - POST방식

인포꿀팁 발행일 : 2020-12-05

ex.jsp => 사용자 요청 페이지

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
 
<script type="text/javascript">
// AJAX 객체 생성
function createXMLHttpRequest() {
    var req = null;
    
    if(window.XMLHttpRequest) { // IE 7.0 이상, Non-Microsoft browsers
        req = new XMLHttpRequest();
    } else if(window.ActiveXObject) { // IE 7 미만
        req = new ActiveXObject("Msxml2.XMLHTTP");
    }
    
    return req;
}
 
var httpReq = null;
function send() {
    var query;
    var num1=document.getElementById("num1").value;
    var num2=document.getElementById("num2").value;
    var oper=document.getElementById("oper").value;
    //
    query="num1="+num1+"&num2="+num2+"&oper="+oper;
    var url = "ex3_ok.jsp";
    
    // AJAX 객체 생성
    httpReq = createXMLHttpRequest();
    
    // 서버에서 처리한 결과를 전송 할 자바스크립트 함수 지정
    httpReq.onreadystatechange = callback;
    
    // post 방식으로 서버에 전송
    httpReq.open("POST", url, true);
    //form 태그에서 기본적으로 설정되어있는 값 여기서는 form을 사용하지 않았기 때문에 encode 방식을 세팅해줘야 한다.
    httpReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
    httpReq.send(query);
}
 
// 서버에서 처리한 결과를 넘겨 받는 함수
function callback() {
    if(httpReq.readyState == 4) { // 요청상태(4:모든 요청 및 응답 완료)
        if(httpReq.status == 200) { // 서버로 부터 넘겨 받은 상태코드(200:성공)
            printData();
        }
    }
}
 
function printData() {
    var box = document.getElementById("box");
    
    // 서버에서 전달 받은 데이터(html)
    var result = httpReq.responseText;
    
    box.innerHTML = result;
}
</script>
 
</head>
<body>
 
<h3> AJAX 예제 - POST 방식 </h3>
 
<p>
    <input type="text" id="num1">
    <select id="oper">
        <option value="add">더하기</option>
        <option value="sub">빼기</option>
        <option value="mul">곱하기</option>
        <option value="div">나누기</option>
    </select>
    <input type="text" id="num2">
    <button type="button" onclick="send();"> = </button>
</p>
<hr>
<div id="box"></div>
 
</body>
</html>
cs

 

 

1)open 메소드 수정

open 메소드에 post 방식 기재

body 구역에 form 태그로 submit 했다면 상관없지만 만일 form을 기재 하지 않았다면 

httpReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded") 으로 세팅해줘야 한다.

get방식과 다르게 post 방식은 url로 값이 넘어가지 않으므로 send() 메소드 전송시 값이 있는 query와 함께 전송해야한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var httpReq = null;
function send() {
    var query;
    var num1=document.getElementById("num1").value;
    var num2=document.getElementById("num2").value;
    var oper=document.getElementById("oper").value;
    //
    query="num1="+num1+"&num2="+num2+"&oper="+oper;
    var url = "ex3_ok.jsp";
    
    // AJAX 객체 생성
    httpReq = createXMLHttpRequest();
    
    // 서버에서 처리한 결과를 전송 할 자바스크립트 함수 지정
    httpReq.onreadystatechange = callback;
    
    // post 방식으로 서버에 전송
    httpReq.open("POST", url, true);
    //form 태그에서 기본적으로 설정되어있는 값 여기서는 form을 사용하지 않았기 때문에 encode 방식을 세팅해줘야 한다.
    httpReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
    httpReq.send(query);
}
cs

 

 

ex_ok.jsp => 결과 처리 페이지

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
    int num1 = Integer.parseInt(request.getParameter("num1"));
    int num2 = Integer.parseInt(request.getParameter("num2"));
    String oper = request.getParameter("oper");
    String result="";
    
    switch(oper){
    case "add" : result=String.format("%d+%d=%d", num1,num2, num1+num2); break;
    case "sub" : result=String.format("%d-%d=%d", num1,num2, num1-num2); break;
    case "mul" : result=String.format("%d*%d=%d", num1,num2, num1*num2); break;
    case "div" : result=String.format("%d/%d=%d", num1,num2, num1/num2); break;
    }
%>
 
<p>
    수1: <%=num1 %>, 수2: <%=num2 %>
</p>
<p> 결과 : <%=result %></p>
 
cs

 

'Web > AJAX' 카테고리의 다른 글

[Ajax] Ajax 적용하기 - jQuery.load() : GET방식  (0) 2020.12.07
[Ajax] Ajax 적용하기 - JSON 방식  (0) 2020.12.07
[Ajax] Ajax 적용하기 - xml방식  (0) 2020.12.05
[Ajax] Ajax 적용하기 - GET방식  (0) 2020.12.05
[Ajax] ajax란?  (0) 2020.12.05

댓글