본문 바로가기
front-end

[Ajax] Ajax 비동기방식 개념

by CodeMango 2023. 2. 8.

https://www.youtube.com/watch?v=nKD1atl6cAw&t=37s  참조

Ajax (Asynchronous JavaScript and XML)

  • 자바스크립트를 이용해서 비동기식으로 XML을 이용하여 서버와 통신하는 방식
  • 최근에는 XML 보다  JSON을 더 많이 사용한다.
  • 비동기식이란 여러가지 일이 동시적으로 발생한다는 뜻으로, 서버와 통신하는 동안 다른 작업을 할 수 있다는 의미

Ajax 언어 해석하기

비동기 : Asynchronous

프론트엔드에서 페이지 전환 없이 웹서버와 통신하는 것

웹에서 실시간으로 문서편집, 지도도 보는 등의 기능을 할 수 있는데,  Ajax라는 비동기로 서버와 통신할 수 있는 기술이 있기 때문이다.

 

서버 

유저가 데이터 요구하면 데이터 보내주는 프로그램

ex) 네이버웹툰서버 : 유저가 웹툰 달라고 요구하면 웹툰 보내주는 프로그램

 

요구하는 방법

1. 원하는 데이터 URL 을 알아야 한다.   *URL: 서버개발자가 만든 API

2. 그 URL로 'GET요청' 한다.

 

'GET요청' 하는방법 3가지

1. 주소창에 url 입력 

2. 버튼으로 get요청  -> 브라우저가 항상 새로고침됨

<form action = "comic.naver.com" type="get">
<button type = "submit">

3. AJAX로 GET요청 -> 새로고침 없이 서버에게 GET요청하는 JS코드

장점 : 새로고침이 없으니까 웹페이지 전환이 부드러워짐

1) URL로 (영상참조)

 

자바스크립트로 GET요청하는 방법 

1. 옛날 JS 방식

<script>
var ajax = new XMLHttpRequest();
	ajax.onreadystatechange = function(){
     it(this.readyState == 4 && this.status == 200) {
       console.log(ajax.reponseText)
       }
    };
    ajax.open("GET", "https://naver.com", true);
    ajax.send();
</script>

2. 요즘 JS방식

<script>

 fetch("https://naver.com')
 	.then((response) => {
    return response.json()
    })
    .then((결과) => {
     console.log(결과)
    })
    
</script>

3. 외부 라이브러리 방식

- Jquery안에  ajax 함수 쓰는 방법

- react에서 axios 라이브러리 쓰는 방법

 

Ajax의 동작방식

  1. 요청 : 브라우저는 서버에 정보를 요청한다.  (브라우저는 Ajax요청을 담당하는 XMLHttpRequest 라는 객체를 구현하고 있다.)
    [ 서버의 동작 : 서버는 응답으로 데이터를 전달한다. (XML, JSON) ]
  2. 응답 : 브라우저는 콘텐츠를 처리하여 페이지에 추가한다.

참조 : https://devyj.tistory.com/1

 

Ajax 함수

참조. https://goodmean.tistory.com/95

1.setCharacterEncoding () 

  •  클라이언트에게 보내는 데이터의 문서타입과 문자셋을 응답정보 헤더에 설정하는 메소드이다. 
  • 들어오는 파라미터를 UTF-8로 해석할 때 쓴다. 이 밖에 쓰임새는 블로그를 참조한다.
resp.setContentType("application/x-json; charset=utf-8");

 

2. getWriter( )

클라이언트에 응답하기 위한 출력 스트림을 반환한다. 그리고 이 출력 스트림을 이용해 클라이언트에게 응답을 보내게 된다.

reponse.getWriter().print() 를 이용하여  ajax의 결과값으로 보낼 수 있다.

resp.getWriter().print(jObj);

Ajax 예제 1

Q. json에서 데이터 가져오기

index.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>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.1/jquery.min.js"></script>
</head>
<body>

<p id="demo"></p>
<button type="button">button</button>

<script type="text/javascript">

	$("button").click(function(){

// json 읽어들이는 방법
// 자바스크립트에서 블록괄호 ({ }) 나오면 json!
		$.ajax({ 
		// 전송(송신)
			url:"data.json",	// 어디로 갈지?
			type:"get",			// 타입 형식 : get(공개), post(보안) 
			datatype:"json",	// 타입
			
		// 수신(받음)
			success:function(data){
				// alert('success');
				// alert(data);
//내용물 보려면 문자열로 변환하는 JavaScript 쓴다 : 객체를 JSON 문자열로 변환
				// alert(JSON.stringify(data));
				
				for(i = 0;i < data.length; i++){
				$("#demo").append((i + 1) + " "); //1~3
					$("#demo").append(data[i].name + " "); // "" = 문자열
					$("#demo").append(data[i].age + " ");
					$("#demo").append(data[i].address + " ");
					$("#demo").append(data[i].phone + "<br>"); //개행
				}
				
	}, // 파일 못 찾았으면 : error
			error:function(){
				alert('error');	
			}			
		});
	});


</script>


</body>
</html>

data.json

[
	{
		"name":"홍길동",
		"age":24,
		"address":"서울시",
		"phone":"123"
	},
	{
		"name":"성춘향",
		"age":16,
		"address":"남원시",
		"phone":"234"
	},
	{
		"name":"홍두께",
		"age":22,
		"address":"강릉시",
		"phone":"345"
	}
]

 

 과제 

Q. data.jsp 의 데이타를 index로 불러와라

*주의

 \" : key값의 앞뒤에 붙이는 것 

 

index.jasp

<%@ 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>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.1/jquery.min.js"></script>
</head>
<body>
<!--  Q.data.jsp 의 데이타를 index로 불러와라 -->

<p id="name"></p>
<p id="age"></p>
<p id="birth"></p>
<br>
<button type="button">button</button>

<script type="text/javascript">
$(function () {
	
	$("button").click(function(){
		
// json 읽어들이는 방법
// 자바스크립트에서 블록괄호 ({ }) 나오면 json!
		$.ajax({
		// ajax로 전송하기
			url:"data.jsp",		//url
			type:"get",			// 타입 형식 : get(공개), post(보안) 
			datatype:"json",	// 타입
			
			
		// 수신
			success:function(data){
				// alert('success');
				// alert(data.trim());
				
// 이제 데이터를 이 파일의 p태그에 넣어야함

				
			//형변환 - JSON.parse : 문자열->숫자		
				let json = JSON.parse(data);
			//	alert(json);
			
		
// p는 일반태그이므로 json.name이라고 적으면 된다.
				$("#name").text(json.name);
				$("#age").text(json.age);
				$("#birth").text(json.birth);
			
			},
			error:function(){
				alert('error');	
			}
		});
		
	});
});
</script>


</body>
</html>

 

data.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%

String name = "홍길동";
int age = 24;
String birth = "2001/06/17";

// json + 내장객체


//key값 붙이면
String str = "{ \"name\":\"" + name + "\", \"age\":" + age + ", \"birth\":\"" + birth + "\" }";


//       \" : key값의 앞뒤에 붙이는 것 
//key 값 붙이기 전에는  "{name:" + name + ", age:" + age + ", birth" + birth" }";

out.println(str);
%>

Ajax 예제 2

Q. Client에서 Server로 데이타를 보내고, 받아라

데이타를 보내주고, 받는 부분의 통신은 Ajax로 한다.

 

4교시까지 듣고 정리하기

 

댓글