① 웹페이지 일부분만 갱신 가능
② 웹페이지가 로드된 후에도 서버로 데이터를 요청하거나 받을 수 있음
③ 다양한 UI 동적 페이지 구현이 가능
① 페이지의 이동이 없기 때문에 히스토리의 관리가 어려움
② 반복적인 데이터 요청이 있으면 느려지거나 작동 x
open(전달방식, url주소, 동기여부);
-> UNSET(숫자0)
: XMLHttpRequest객체가 생성
-> OPENED(숫자1)
: open()메소드가 성공적으로 실행됨
-> HEADERS_REVEIVED(숫자2)
: 모든 요청에 대한 응답이 도착함
-> LOADING(숫자3)
: 요청한 데이터를 처리중임
-> DONE(숫자4)
: 요청한 데이터의 처리가 완료되어 응답할 준비가 완료됨
<body>
<h3>Ajax 요청 보내기 테스트</h3>
<input type="submit" value="Get방식으로 보내기" onclick="send1();">
<input type="submit" value="post방식으로 보내기" onclick="send2();">
<p id="result"></p>
<script>
// 1. GET 방식으로 보내기
function send1() {
// 브라우저 내장객체
let xhr = new XMLHttpRequest();
// request_ajax로 보냄
xhr.open("Get","request_ajax.jsp?userid=apple&userpw=1234", true);
xhr.send();
xhr.onreadystatechange = function(){
// 통신이 성공했을 떄 캐치 통신값 = 200 : 통신성공
if( xhr.readyState == XMLHttpRequest.DONE && xhr.status == 200 ){
// p tag안에 html값으로 넣어줄거야
document.getElementById("result").innerHTML = xhr.responseText;
}
}
}
// 2. POST 방식으로 보내기
function send2() {
// 브라우저 내장객체
let xhr = new XMLHttpRequest();
// request_ajax로 보냄
xhr.open("post","request_ajax.jsp", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("userid=admin&userpw=abcdefg");
xhr.onreadystatechange = function(){
// 통신이 성공했을 떄 캐치 통신값 = 200 : 통신성공
if( xhr.readyState == XMLHttpRequest.DONE && xhr.status == 200 ){
// p tag안에 html값으로 넣어줄거야
document.getElementById("result").innerHTML = xhr.responseText;
}
}
}
</script>
</body>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String userid = request.getParameter("userid");
String userpw = request.getParameter("userpw");
out.print("아이디 : " + userid + ", 패스워드 : " + userpw);
%>
<body>
<script>
let xhr = new XMLHttpRequest();
xhr.open("Get","data.json", true);
xhr.send();
xhr.onreadystatechange = function(){
if( xhr.readyState == XMLHttpRequest.DONE && xhr.status == 200 ){
// 통신 성공 시 json형식을 잘라서 obj에 담기
let obj = JSON.parse(xhr.responseText);
alert(obj.result);
alert(obj.count);
}
}
</script>
</body>
{
"result" : "success",
"count" : 20
}
JSON.parse(xhr.responseText) : Json형 데이터를 잘라줌
JSON.parse(xhr.responseText) : Json형 데이터를 잘라줌
🙆♀️ 알아두기
https://code.google.com/archive/p/json-simple/downloads
위 사이트에서 json-simple-1.1.1.jar 파일 다운 및 복사
- 다이나믹 프로젝트 폴더 > src > WEB-INF > lib에 붙여넣기
- build path 잡아주기
- JSON(JavaScript Object Notation) 데이터를 파싱하고 생성하는 Java 라이브러리 중 하나
① json 형식의 data
{
"search_word":[
{"rank":"1", "name":"코로나"},
{"rank":"2", "name":"비트코인"},
{"rank":"3", "name":"JSP"},
{"rank":"4", "name":"JAVA"},
{"rank":"5", "name":"웹개발"}
]
}
② 출력할 화면 만들어주기
<body>
<h1>Ajax를 이용해 실시간 순위 나타내기</h1>
<table border="1">
<tr>
<th>실시간 검색 순위</th>
<th>키워드</th>
</tr>
<tr>
<td id="td1">순위</td>
<td id="td2">키워드</td>
</tr>
</table>
<script>
window.onload = function(){
let obj = "";
let word = new Array();
//json에서 꺼낸 값을 배열로 예쁘게
let xhr = new XMLHttpRequest();
xhr.open("Get", "data.json", true);
xhr.send();
xhr.onreadystatechange=function(){
if( xhr.readyState == 4){
// 정상 작동 하면
obj= JSON.parse(xhr.responseText);
// json 타입으로 파싱 -> 배열 형태로 데이터가 담김
for( let i = 0; i<obj.search_word.length; i++){
word[i] = obj.search_word[i].name;
//name만 꺼내서 word라는 배열안에 담아준다.
}
}
}
// 1. 배열생성 완료
// 2. 배열 꺼내기
let i = 0;
// setInterval(함수, 밀리초) = 해당 밀리초마다 함수 호출
let interval = setInterval(function(){
//JSON 안에 있는 search_word 배열의 길이로 나눈 나머지는
// 0, 1, 2, 3, 4 -> 5가 되는 순간 0이 된다.
i = i%obj.search_word.length;
document.getElementById("td1").innerHTML = i + 1;
document.getElementById("td2").innerHTML = word[i];
i++;
}, 1000);
// setTimeout(함수, 밀리초)
// 해당 밀리초 이후에 앞에 넘겨준 함수를 호출
// 20초 후에 함수에 있는 걸 스탑시켜주고 싶을 때
setTimeout(function(){ clearInterval(interval); },20000);
}
</script>
</body>
👀 확인
json 타입으로 파싱 -> 배열 형태로 데이터가 담김
JSON.parse(xhr.responseText)
= [object, object]
JSON.parse(xhr.responseTEXT).search_word
= [{},{},{},{},{}]
① json 형식의 data
{
"search_word":[
{"rank":"1", "name":"코로나"},
{"rank":"2", "name":"비트코인"},
{"rank":"3", "name":"JSP"},
{"rank":"4", "name":"JAVA"},
{"rank":"5", "name":"웹개발"}
]
}
② 출력할 화면 만들어주기
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script>
</head>
<body>
<input type="button" value="jquery_get" onclick="get()">
<input type="button" value="jquery_post" onclick="post()">
<script>
function get(){
$.ajax({
type: "GET",
url: "data.json",
dataType: "json",
contentType : "application/x-www-form-urlencoded;charset=UTF-8",
error: function() {
console.log('통신실패!!');
},
success: function(data) {
console.log("get data : " + data);
console.log("get data.search_word : " + data.search_word);
console.log("get data rank : " + data.search_word[0].rank);
console.log("get data name : " + data.search_word[0].name);
}
});
}
function post(){
$.ajax({
type : 'post',
url : 'data.json',
dataType: "json",
contentType : "application/json; charset=utf-8",
error: function() {
console.log('통신실패!!');
},
success: function(data) {
console.log("post data : " + data);
console.log("post data.search_word : " + data.search_word);
console.log("post data rank : " + data.search_word[0].rank);
console.log("post data name : " + data.search_word[0].name);
}
});
}
</script>
</body>