1. ajax
- 비동기화 통신을 할 수 있는 웹 어플리케이션 기법
- XMLHttpRequest 객체 활용
- ajax에서 요청할 컨텐츠 타입을 주로 -> json, xml, text
*** 동기화와 비동기화 ***
동기화
- 요청과 응답이 동시에 이루어짐
- 클라이언트가 서버에 요청시 서버에서 응답
- 작성된 코드 순서대로 처리를 완료하고 이후에 클라이언트에 응답을하는방식
> 서버에서 응답이 늦어질 경우 클라이언트에서 화면출력을 대기하는 시간이 길어진다.
비동기화
- 요청과 응답이 동시에 이루어지지 않는다
- 웹페이지를 리로드하지 않고 서버와 통신하는 방식
- 클라이언트 먼저 실행이되고 서버에서 응답이 왔을 경우 작성된 코드가 실행이 된다.
**********************
*** contnetType (MIME-TYPE) ***
html -> text/html
xml -> application/xml
json -> application/json
text -> text/plain
**********************
1) json
- application/json 콘텐츠 타입
- 구문 {"key" : "value"}
- 구문 [{"key" : "value"}, {"key" : "value"}]
2) jQuery $.ajax
- XMLHttpRequest 가공하여 만들어진 메서드
- 응답페이지의 요청 방식을 설정
▼ html 템플릿
<button type="button" id="ajaxCall">요청</button>
<script type="text/javascript">
$(function(){
$('#ajaxCall').click(function(){
//1. $.ajax() 메서드 실행시 객체를 삽입하여 실행 가능
//2. 객체에는 요청 주소, 요청 방식, 데이터, 응답방식
var request = $.ajax({
url: "jsonContentType.jsp", //요청주소
method: "POST", //요청방식
data: { myName : '홍길동' }, //요청하는 페이지에 전달할 데이터
dataType: "json" //응답방식(html, xml, json, text, function)
});
request.done(function( data ) { //응답 정상 완료시 실행되는 메서드
//응답 완료시 등답페이지의 텍스트를 읽어 콜백데이터로 전달
//응답방식에 맞춰서 파싱하여 전달
console.log(data);
});
request.fail(function( jqXHR, textStatus ) { //응답 실패시 실행
//파싱에러 -> 포멧방식이 잘못 전달
//에러 -> 서버에서 대부분 에러
alert( "Request failed: " + textStatus );
});
})
})
</script>
▼ jsp 템플릿
<%@ page language="java" contentType="application/json; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String myName = request.getParameter("myName");
%>
{"key" : "value", "key1" : 0, "key2" : true, "myName" : "<%=myName%>"}

>>> 상단의 html 템플릿은 jQuery 홈페이지에서 복사하면된다.(ajax검색 -> 하단의 항목선택 후 소스코드 복사)

2. spring - ajax 비동기 통신
0. 파일생성


1. application.properties 수정
server.port=80
//정적리소스 맵핑
spring.web.resources.static-locations=classpath:/static/
//로거레벨설정
logging.level.root=INFO
logging.level.org.springframework.web=OFF
2. controller 생성(동작확인)
@Controller
public class MainController {
@GetMapping("/")
public String main() {
return "index";
}
3. 경로생성

4. dto생성 (작성 후 getter/setter와 toString 작업)

package kr.or.ksmart.dto;
public class User {
private String userName;
private String userAddr;
private int userAge;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserAddr() {
return userAddr;
}
public void setUserAddr(String userAddr) {
this.userAddr = userAddr;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
@Override
public String toString() {
return "User [userName=" + userName + ", userAddr=" + userAddr + ", userAge=" + userAge + "]";
}
}
5. service생성(/**후 자동완성기능을 사용하여 @param, @return등 설정)

package kr.or.ksmart.service;
import org.springframework.stereotype.Service;
import kr.or.ksmart.dto.User;
@Service
public class UserService {
/**
* 회원 1명의 정보를 가지고 오기
* @param - 없음
* @return User
*/
public User getUser() {
//db에서 회원 1명의 정보를 가지고 왔다는 가정
User user = new User();
user.setUserName("홍길동");
user.setUserAddr("전주시");
user.setUserAge(20);
return user;
}
}
6. 경로 수정
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>AJAX</title>
<script type="text/javascript" src="/js/jquery-3.6.0.min.js"></script>
</head>
<body>
<button type="button" id="getUser">회원정보</button>
<script type="text/javascript">
$('#getUser').click(function(){
var request = $.ajax({
url: "/user/getUser",
method: "POST",
dataType: "json"
});
request.done(function( data ) {
console.log(data);
});
request.fail(function( jqXHR, textStatus ) {
alert( "Request failed: " + textStatus );
});
});
</script>
</body>
</html>
>>확인

3. map data 전달
> js부분
var request =
$.ajax({
url: "/payList/modifyList",
type: "POST",
data : {
"modifyCode" : modifyCode,
"modifyName" : modifyName,
"modifyAmount" : modifyAmount,
"modifyContents" : modifyContents,
},
success: function(data){
alert('성공~');
}
});
request.fail(function( jqXHR, textStatus ) {
alert( "Request failed: " + textStatus );
});
> controller부분
// 급여내역 수정 ajax
@RequestMapping(value = "/modifyList", method = { RequestMethod.POST })
@ResponseBody
public String modifyFixedList(@RequestParam Map<String, Object> param) {
String modifyCode = (String) param.get("modifyCode");
String modifyName = (String) param.get("modifyName");
String modifyAmount = (String) param.get("modifyAmount");
String modifyContents = (String) param.get("modifyContents");
System.out.println(modifyCode + " <- modifyCode!!");
System.out.println(modifyName + " <- modifyName!!");
System.out.println(modifyAmount + " <- modifyAmount!!");
System.out.println(modifyContents + " <- modifyContents!!");
/*
* log.info("수정화면에서 입력받은 data:{}", fixedAllowanceList);
* payListService.modifyFixedList(fixedAllowanceList);
*/
return modifyCode;
}

'javascript' 카테고리의 다른 글
제이쿼리(J-Query) (0) | 2023.05.15 |
---|---|
이벤트 등록, 동적 바인딩 (0) | 2023.05.15 |
Document API - 객체 검색 (0) | 2023.05.15 |
html 요소 이벤트, on-- 속성, form 객체 (0) | 2023.05.15 |
브라우저 객체 모델(window) (0) | 2023.05.15 |