<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.4/dist/Chart.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/emn178/chartjs-plugin-labels/src/chartjs-plugin-labels.js"></script>

chartjs-plugin-labels을 사용하기 위한 설정

 

 

위와 같은 차트의 라벨에 세 자릿수마다 콤마를 찍고 싶었다.

 

https://chartjs-plugin-datalabels.netlify.app/guide/formatting.html

 

Formatting | chartjs-plugin-datalabels

Formatting Data Transformation Data values are converted to string ('' + value). If value is an object, the following rules apply first: value = value.label if defined and not null else value = value.r if defined and not null else value = 'key[0]: value[ke

chartjs-plugin-datalabels.netlify.app

공식문서와 구글 검색에서는 formatter를 사용하라고 한다.(필자가 못 찾는 걸 수도...)

type : 'pie' 설정이라 그런지. formatter는 먹히지 않았다.

 

2일의 뻘짓. .

// 기존코드
... // 생략
plugins: {
    labels: {
        render: 'value', .. // 생략
        }
    }
}

우연히 눈에 들어온 render = 'value'

// 변경코드
... // 생략
plugins: {
    labels: {
        render: function(data) {
        	console.log(data);
        	return data.value.toString().replace(/\B(?<!\.\d*)(?=(\d{3})+(?!\d))/g, ",");
        }, .. // 생략
    }
}

공식문서를 응용하여 함수를 만들어 파라미터를 콘솔로 찍어보니 dataset 객체가 마구 찍히고 있었다.

속는 셈 치고 위와 같이 코딩을 해보니 라벨에 콤마가 잘 찍혔다.

 

 

속이 뻥 뚫리는 기분이다. 🤣

게시판형 웹사이트를 구현하다 보면 검색 시작일 ~ 검색 종료일을 검색할 때 datePicker로 많이 사용한다.

지난번 프로젝트 때 다 만들어 놓았던 util 함수였는데, 내부망이라서 코드를 다 날려버렸다.

새로 시작한 프로젝트에서도 비슷한 유형의 검색을 하게 되어 추후 사용할지도 몰라 업로드한다.🤣

 

/* utils.js */

let utlls = {
    /**
     * 기준일자 default 셋팅
     * @param fromId
     * @param toId
     */
    searchDateSet : function (fromId = '#do_date', toId = '#do_date1') {
        let nowDate = new Date();
        let setMonth = (nowDate.getMonth()+1).toString();
        let setDay = nowDate.getDay().toString();
        let setDate = nowDate.getFullYear() + (setMonth < 10 ? '0' + setMonth : setMonth) + (setDay < 10 ? '0' + setDay : setDay);  // yyyymmdd
        if(fromId.indexOf('cpn_date') > Number(-1)) {
            setDate = nowDate.getFullYear() + '/' + (setMonth < 10 ? '0' + setMonth : setMonth);    // yyyy/mm
        }
        $(fromId).val(setDate);
        $(toId).val(setDate);
    },

    /**
     * 기준일자 데이트피커 포맷
     * @param fromId : 기준시작일
     * @param toId   : 기준종료일
     */
    datePickerFormat : function (fromId = '#do_date', toId = '#do_date1') {
       if(fromId.indexOf('cpn_date') > Number(-1)){
           $(fromId).datepicker({
               dateFormat: 'yy/mm'
           });
           $(toId).datepicker({
               dateFormat: 'yy/mm'
           });
       } else {
           $(fromId).datepicker({
               dateFormat: 'yymmdd'
           });
           $(toId).datepicker({
               dateFormat: 'yymmdd'
           });
       }
    },

    /**
     * 기준일자 value 체크
     * @param fromId
     * @param toId
     * @param obj
     */
    searchDateValidation : function (fromId = '#do_date', toId = '#do_date1', obj) {
        let fromDate = $(fromId).val();
        let toDate = $(toId).val();

        if(fromDate.replace("/", "") && toDate.replace("/", "") && fromDate > toDate) {
            if(obj.id.indexOf("1") == -1) { // 기준시작일
                alert('기준시작일은 기준종료일보다 빠를 수 없습니다.');
                $(fromId).val(toDate);
            }else {
                alert('기준종료일은 기준시작일보다 늦을 수 없습니다.');
                $(toId).val(fromDate);
            }
        }
    }
}

utils.js를 따로 작성해 주었다. 게시판 형일 경우 비슷하게 날짜를 포맷하는 경우가 많아. 그 경우 파라미터에 default id를 지정해 준다. 포맷 형식이 다른 id는 if문을 사용. * default id값에 #을 포함하여 넣는건 추천하지 않는다. 초보인지라.. 더 좋은 방법이 생각나면 코드 수정을 할 예정....... 피트백도 좋습니다.

 

<script type="text/javascript" src="utils.js"></script>
<script type="text/javascript">
    $(function() {
        utlls.datePickerFormat('#cpn_date', '#cpn_date1');
        utlls.searchDateSet('#cpn_date', '#cpn_date1');
    });
</script>        
<body>
	<input type="text"  id="cpn_date"  readonly name="cpn_date" onchange="utlls.searchDateValidation('#cpn_date', '#cpn_date1', this);"> -
	<input type="text"  id="cpn_date1" readonly name="cpn_date1" onchange="utlls.searchDateValidation('#cpn_date', '#cpn_date1', this);">
</body>

html 코드는 간략하게 작성하였다.

샘플 이미지

 

restApi를 사용하다보면 전송할 데이터가 JSON 안에 배열을 넣어야 하는 데이터일 때가 종종 있다.

그래서 글을 한번 작성해 보려 한다.

 

let id = 'testId';
let key = 'testKey';

let testArr1 = [{"number":2,"color":'red'}];
let testArr2 = new Array();
let pushJson = {
  "number":3,
  "color":'blue'
};
testArr2.push(pushJson);

let params = {
  "id":id,
  "key":key,
  "arr1":testArr1,	// "arr1":[{"number":2,"color":'red'}] 가능
  "arr2":testArr2
};

console.log(params);

JSON 안에 배열 추가

json data 생성시 value값으로 배열을 넣어주기만 하면 된다.

배열 안에 JSON  추가

배열에 생성해논 JSON data를  push() 함수를 사용하여 추가해주었다.

 

params의 모양을 그려보면 아래와 같다.

{
  id: 'testId',
  key: 'testKey',
  arr1: [
    {
      number:2,
      color:'red'
    }
  ],
  arr2: [
    {
      number: 3,
      color: 'blue'
    }
  ]
}

 

console 이미지

 

 

이미지를 올리기 전 미리보기를 구현해보자!

 

전체 코드

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>

    <div id="previewDiv"></div>
    <input type="file" id="imgInput" onchange="readURL(this)">

    <script>
        function readURL(obj) {

            let reader = new FileReader();
            if(!obj.files.length) {
                return;
            }
            reader.readAsDataURL(obj.files[0]);
            reader.onload = function (e) {
                let img = $('<img />');
                $(img).attr('src', e.target.result);
                $('#previewDiv').append(img);
            }
        }
</script>
</body>
</html>

 

우선 제이쿼리를 사용하기 위해 링크를 걸어준다.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

 

body에 div를 선언하고, input 태그에 onchange 이벤트가 발생할 때 스크립트에 만들어 논 함수를 실행한다.

파라미터엔 this를 넣어준다.

this = 해당 태그의 객체

<div id="previewDiv"></div>
<input type="file" id="imgInput" onchange="readURL(this)">

 

파일에 이미지를 업로드하고 클릭을 하게 되면 readURL함수가 실행되고 매개변수로 객체를 받게 된다.

FileReader를 불러오고, 매개변수로 넘어온 값의 길이가 0일 경우 return

readAsDataURL() 함수를 통해 File에서 읽는다.

readAsDataURL() 읽어 온 후 onload가 실행되는데 이때 img태그를 생성하여, img태그에 src를 url로 넣어준 후 div에 img를 추가해준다.

function readURL(obj) {
            let reader = new FileReader();
            if(!obj.files.length) {
                return;
            }
            reader.readAsDataURL(obj.files[0]);
            reader.onload = function (e) {
                let img = $('<img />');
                $(img).attr('src', e.target.result);
                $('#previewDiv').append(img);
            }
        }

회원가입이나 value 체크를 할 때 정규식을 많이 사용하게 된다.

자주 사용할만한 함수를 모아서 한곳에 모아두면 편리해진다!

 

value 체크를 위한 js코드 ( join-util.js )


var joins = {
    /**
     * 공백체크
     * @param str
     * @returns {boolean}
     */
    nullCheck : function (str){
        if((!str)){
            return true;
        }
        return false;
    },
    /**
     * 아이디체크
     * @param str
     * @return {boolean}
     */
    idCheck : function (str){
        var check = /^[A-Za-z0-9+].{3,25}$/;
        if((!str) || (!check.test(str))){
            return true;
        }
        return false;
    },
    /**
     * 길이체크 : 2글자 이상 ~ 10글자 이하
     * @param str
     * @returns {boolean}
     */
    lenCheck : function (str){
        var check = /^[가-힣]{2,10}$/;
        if((!str) || (!check.test(str))){
            return true;
        }
        return false;
    },
    lenCheck2 : function (str){
        if((!str) || (str.length < 2)){
            return true;
        }
        return false;
    },
    /**
     * 숫자 확인
     * @param num
     * @return {boolean}
     */
    numberCheck : function (str){
        console.log(str);
        var check = /[0-9]/g;
        if((!str) || (!check.test(str))){
            return true;
        }
        return false;
    },

    /**
     * 이메일 형식 확인
     * @param str
     * @return {boolean}
     */
    emailCheck : function (str){
        var check = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]+$/;;
        if((!str) || (!check.test(str))){
            return true;
        }
        return false;
    },

    /** 패스워드는 6 ~ 20자 이내 영문 대,소문자, 숫자, 특수문자 혼합 입력
     * 패스워드 형식 확인 : 영문/숫자/특수문자 조합 10자 이상
     * @param str
     * @return {boolean}
     */
    passwordCheck : function (str){
        var check = /^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{6,20}$/;
        if((!str) || (!check.test(str))){
            return true;
        }
        return false;
    },
    /**
     * 패스워드 재확인
     * @param str
     * @param str2
     * @return {boolean}
     */
    pwConfirmCheck : function (str, str2){
        if((!str2) || (str != str2)){
            return true;
        }
        return false;
    },
    /**
     * 전화번호 하이픈처리
     * @param obj
     */
    phoneKeyup : function (obj) {
        $(obj).val($(obj).val().replace(/[^0-9]/g, "").replace(/(^02|^0505|^1[0-9]{3}|^0[0-9]{2})([0-9]+)?([0-9]{4})$/, "$1-$2-$3").replace("--", "-"));
    },

    /**
     * 전화번호 확인 : hipen 포함
     * @param str
     * @returns {*}
     */
    phoneCheck : function (str){
        var check = /^01([0|1|6|7|8|9])-?([0-9]{3,4})-?([0-9]{4})$/;
        if((!str) || (!check.test(str))){
            return true;
        }
        return false;
    },

    /**
     * 전화번호 하이픈 제거 : DB 저장시
     * @param str
     * @return {*}
     */
    hyphenClear : function (str){
        return str.replaceAll("-", "");
    },


}

 

view에 가져와 사용을 해보자!

 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <script src="/js/jquery-2.2.4.min.js"></script>
    <script src="/js/common/join-util.js"></script>
    <script src="/js/bootstrap.min.js"></script>

    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" />
    <link href="/css/bootstrap.min.css" rel="stylesheet">


    <title>Title</title>
    <script type="text/javascript">
        function onChangeConfirm(obj, join, text) {
            if($(obj).val().trim().length > 0){
                if(join($(obj).val().trim())) {
                    $(obj).siblings().text(text);
                    confirmFail(obj);
                    return true;
                }else{
                    confirmSuccess(obj);
                    return false;
                }
            }else if($(obj).val().trim().length === 0){
                $(obj).removeClass('is-invalid');
                $(obj).removeClass('is-valid');
                $(obj).siblings().text("");
            }
        }

        function confirmFail(obj){
            $(obj).addClass('is-invalid');
            $(obj).siblings().addClass('invalid-feedback');
            $(obj).focus();
        }

        function confirmSuccess(obj){
            $(obj).removeClass('is-invalid');
            $(obj).addClass('is-valid');
        }
    </script>
</head>
<body>
<div class="form-group">
    <label for="userId" class="col-sm-2 control-label">아이디</label>
    <div class="col-sm-10">
        <input type="text" class="form-control" name="userId" id="userId" placeholder="아이디" data-minlength="4" required
               onchange="onChangeConfirm(this, joins.emailCheck, '이메일형식으로 입력해 주세요.')">
        <div class="float-right"></div>
    </div>
</div>
<div class="form-group">
    <label for="userName" class="col-sm-2 control-label">이름</label>
    <div class="col-sm-10">
        <input type="text" class="form-control" name="userName" id="userName" placeholder="이름" data-minlength="2" required
               onchange="onChangeConfirm(this, joins.lenCheck, '이름은 두글자 이상 입력해 주세요.' )">
        <div></div>
    </div>
</div>
</body>
</html>

 

 

 

코드를 분석해 보자면..

<script src="/js/jquery-2.2.4.min.js"></script>

extarnal 방식 으로 JS파일을 불러온다.

 

 

<input type="text" class="form-control" name="userId" id="userId" placeholder="아이디" data-minlength="4" required
       onchange="onChangeConfirm(this, joins.emailCheck, '이메일형식으로 입력해 주세요.')">
<div class="float-right"></div>

input 태그에서 onchage이벤트 발생시 onchageConfirm 함수가 실행되고, 함수의 파라미터로 this(태그 자체), util안의 함수, 문자열을 받게 된다.

 

 

function onChangeConfirm(obj, join, text) {
    if($(obj).val().trim().length > 0){
        if(join($(obj).val().trim())) {
            $(obj).siblings().text(text);
            confirmFail(obj);
            return true;
        }else{
            confirmSuccess(obj);
            return false;
        }
    }else if($(obj).val().trim().length === 0){
        $(obj).removeClass('is-invalid');
        $(obj).removeClass('is-valid');
        $(obj).siblings().text("");
    }
}

 

onchageConfirm()

- $(obj).val() : this의 value

- join : util안의 함수(emailCheck) == 파라미터로 받았기 때문에 콜백 함수가 된다.

/**
 * 이메일 형식 확인
 * @param str
 * @return {boolean}
 */
emailCheck : function (str){
    var check = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]+$/;;
    if((!str) || (!check.test(str))){
        return true;
    }
    return false;
}

if문 안에 함수의 파라미터로 $(obj).val()를 넣어주면 함수의 실행에 따라 boolean값을 반환 받게 된다.

 

true를 반환 받을 시

$(obj).siblings() : this의 형제요소 == <div class="float-right"></div> 의 text에 파라미터로 받은 문자열을 넣어주면, 조건 실행시 text가 보여지게 된다.

 

실행화면

 

브라우저 객체란 ?

말 그대로 브라우저에 내장된 객체를 의미한다. 브라우저 객체의 최상위 객체는 window 객체이며, window 객체는 하위객체가 포함되어 있다. 즉, 계층적 구조이며, 이를 BOM(Browser Object Model)이라고 한다.

 

window 객체의 메서드 종류

종류 설명
open("URL","새 창 이름", "새 창 옵션") URL 페이지를 새 창으로 나타낸다.
alert() 경고창을 나타내고, 데이터를 보여준다. 방문자가 [확인]버튼을 누르면 alert()를 사용한 다음 위치의 코드를 수행한다.
prompt("질문", "답변") 질문과 답변으로 질의응답 창을 나타낸다.
confirm("질문내용") 질문 내용으로 확인이나 취소창을 나타낸다.
[확인] 버튼 = true를 반환
[취소] 버튼 = false를 반환
moveTo(x,y) 지정한 새 창의 위치로 이동한다.
resizeTo(width, htight) 지정한 새 창의 크기를 변경한다.
setInterval(function() { 자바스크립트 코드}, 일정시간간격) 지속적으로 일정한 시간 각격으로 함수를 호출한다.
setTimeout(function() { 자바스크립트 코드}, 일정시간간격) 단 한 번 일정한 시간 간격으로 함수를 호출한다.

메서드 사용 예

 

- open() : 새 창을 열어준다. 필자는 팝업창을 나타낼 때 사용하였다.

window.open("http://www.naver.com", "naver", "width=350, height=450, left=50, top=10, scrollbars=no");

 

- close() : 예를 들어 버튼이 있다는 가정하에 버튼을 클릭하면 창을 닫아준다.

<button onclick="window.close()"></button>

 

- alert() : 경고창을 나타낸다.

alert("삐빅! 잘못됬습니다");

 

- prompt() : 질의 응답 창을 나타낸다. 

prompt("당신의 나이는 ? ", "0");

 

- confirm() : 확인 / 취소창을 나타낸다. 확인버튼 : true를 return, 취소버튼 : false를 return

confirm("탈퇴하시겠습니까?");

 

- setInterval() : 일정 시간 간격으로 함수를 실행시킨다.

- clearInterval() :  setInterval() 메서드를 취소시킨다.

 

- setTimeout() : 단 한번만 일정시간이 지나면 코드를 실행하고 종료한다.

var auto = setTimeout(() =>{
             addNum++;
             console.log("setTimeout addNum : "+ addNum); 
         }, 5000);

 

 

Ajax에서 servlet 접근해서 데이터 가져오기

 

배워 놓고도 너무 어려워서 참고용으로 코드만 업로드 하겠다...

 

Ajax 예제

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>

<button type="button">클릭</button>
<!-- html의 Ajax에서 서블릿 접근해서 데이터 가져오기 -->
<script type="text/javascript">
$(function() {
	$("button").click(function() {
		$.ajax({
			url : "./hello",  // ./ 현재경로표시
			type : "get",
		//	data : "id=abc&pwd=123",
			data : { id:"ABC", pwd:"456"}, // 이 값을 가지고 servlet으로 간다.
			
		// 매우중요!!	
			success : function(data) { // Ajax 목적 : data를 얻기 위함
		//		alert('success');
		//		alert(data);
		//		alert(JSON.stringify(data));// 날린 데이터 확인
		
		//  1개 데이터
		//		alert(data.str); 
		
		// 	여러개 데이터
		//		alert(data.map.title); 		// 날린 데이터 확인
		//		alert(data.map.content);
		
		//	Dto데이터 날리기
		//		alert(data); // object날라옴
		//		alert(JSON.stringify(data)); // json데이터 날라옴
		//		alert(data.list);
				alert(data.list[0].number); // 날린 데이터 확인
				alert(data.list[0].name);
		// for문과 foreach문 사용해서 데이터 전체를 뽑을 수 있다.		
		
			},
			errer : function() {
				alert('errer');
			}
		});
	});
});
</script>

</body>
</html>

 


java MemberDto 예제

package dto;

public class MemberDto {
	private int number;
	private String name;
	
	public MemberDto() {}

	public MemberDto(int number, String name) {
		super();
		this.number = number;
		this.name = name;
	}

	public int getNumber() {
		return number;
	}

	public void setNumber(int number) {
		this.number = number;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

Java Servlet 예제

package hello;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dto.MemberDto;
import net.sf.json.JSONObject;

public class HelloServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("HelloServlet doGet()");
	
		String id = req.getParameter("id"); // ajax는 파라미터가 보이지 않는다.
		String pwd = req.getParameter("pwd"); 
		
		System.out.println("id  : " + id);
		System.out.println("pwd : " + pwd);
		
		// java로 넘긴건 JS로 넘기는게 어렵다... get.Attribute사용불가
		
		String str = "World";
		
		JSONObject jobj = new JSONObject();
		// 문자열 전송
	//	jobj.put("str", str);
		
		// 복수(여러개의)의 데이터 전송
		HashMap<String, Object> map = new HashMap<String, Object>();
	//	map.put("title", "이것은 제목입니다");
	//	map.put("content", "이 글의 내용입니다");
		
	//	jobj.put("map", map);
		
		
		// dto를 list로 전송
		List<MemberDto> list = new ArrayList<MemberDto>();	
		list.add(new MemberDto(1001, "정수동"));
		list.add(new MemberDto(1002, "홍두께"));
		
		jobj.put("list", list);
		
		resp.setContentType("application/x-json; charset=utf-8");
		resp.getWriter().print(jobj); // 전송이 되는 부분
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("HelloServlet doPost()");
	
	}
	
	public void doProcess() {} // get, post 상관하기 싫을 때 사용	
}

AJAX로 DB 취합을 해보자!

 

DB 예시(data.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
// 가정 : DB, 데이터를 취합
String name = "성춘향";
int age = 16;
String birth = "09/03/12";

String json = "{ \"name\":\"" + name + "\", \"age\":" + age + ", \"birth\":\"" + birth + "\" }"; 

// System.out.println(json);  // 이클립스 콘솔에 찍어보기

out.println(json);
%> 

 

AJAX DB취합 예시

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>

name : <p id="name"></p>
age : <h3 id="age"></h3>
birth : <input type="text" id="birth">
<br><br>
<button type="button">클릭</button>

<script type="text/javascript">
$(document).ready(function (){
	$("button").click(function(){
		$.ajax({
			url : "data.jsp",
			type : "get",
			success : function(data){
			//	alert('success');
			//	alert(data); // json이 아니다
				
				let json = JSON.parse(data); // String -> json
			//	alert(json); 
			
			// 데이터 가져오기	
				$("#name").text(json.name);
				$("#age").html(json.age);
				$("#birth").val(json.birth);
			},
			error : function() {
				alert('error');
			}
		});
	});
});
</script>
</body>
</html>

설명

url을 data.jsp로 연결하여 String 이였던 데이터를 json형태로 변환하여 데이터를 가져온다.

 

버튼 클릭 전 실행화면

버튼 클릭 후 실행화면

 

AJAX 사용하여 JSON 데이터 출력하기

 

JSON 데이터 예시

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

 

AJAX 사용예시

<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>

<p id="demo"></p><br>
<button type="button">클릭</button>
<!-- json 불러서 p태그에 넣기 -->
<script type="text/javascript">
$(document).ready(function() {
	$("button").click(function() {
		$.ajax({
			url : "data.json", // 어디로 갈거니? // 갈 때 데이터
			type : "get", // 타입은 뭘 쓸거니?
			datatype : "json",
			success : function(data) { // 갔다온 다음 결과값
			//	alert('seccuss');	// 나오면 파일을 찾았다는 것
			//	alert(data);  // [object Object],[object Object],[object Object]
				
			// 데이터를 확인하고 싶을 때.
			//	let str = JSON.stringify(data); // <> parse()
			//	alert(str); 

				$.each(data, function(index, item) { // 데이터 =item
					$("#demo").append(index + " "); // index가 끝날때까지 
					$("#demo").append(item.name + " ");
					$("#demo").append(item.age + " ");
					$("#demo").append(item.address + " ");
					$("#demo").append(item.phone + "<br>");
				});
			},
			error : function() {
				alert('error');			
			}
		});
	});
});
</script>
</body>
</html>

$.each(data, function(index, item)

jQuery의 반복문이다.

첫번째 인자로 index를 주고 두번째 인자로 item(콜백함수)을 준다.

index를 기준으로 반복을 한다.

선택요소에 append함수를 사용하여 값을 추가한다.

 

버튼 클릭시 실행화면

Ajax(Asynchronous JavaScript And Xml) 이란 ?

Ajax는 비동기적인 웹 애플리케이션의 제작을 위해 아래와 같은 조합을 이용하는 웹 개발 기법이다. 위키백과

 

쉽게 말해서..

현재 데이터를 전송해주고 전송받고 하는 도중 웹페이지는 변경이 되지 않는다.

JQuery 소속이다.

없어도 되지만 없으면 불편하다(없으면 속도가 느려진다.)

비동기 통신방식이다.

매우 효율적이다.

 

Axios : 다른 언어에서 사용하는 AJAX (Vue, React)

 

비동기란 ?

현재 문서는 변경되지 않는 상태에서 데이터만 가져오는 것 페이지가 가볍다.

페이지의 전체가 바뀌지 않는다.

 

Ajax의 기본문법 예시

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>

<p id="demo"></p><br>
<button type="button">클릭</button>

<script type="text/javascript">
$(document).ready(function() {
	$("button").click(function() {
		$.ajax({ // ajax 기본형태
			//////////////////// send(가는것)
			url : "data.jsp",
			type : "get",
		//	data : "t1=XYZ&t2=자차카", // 넘겨주는 데이터
			data : {t1:"xyz", t2:"가나다"}, //위와동일

			//////////////////// recv
			success : function(data, status, xhr){ // status, xhr 생략가능 

			//	alert("success"); // 성공하면  success
			//	alert(data);
			
				$("#demo").html(data);
			//	alert(status);  // 상태를 반환한다 (success)
			//	alert(xhr.responseText); // html문서 형태 전체를 출력한다.
			},
			error : function(xhr, status, error) { // (파라미터 생략가능)
				alert("error");
			},
			complete : function(xhr, status) { // (파라미터 생략가능)
				alert("통신종료");
			}
			////////////////////
		});	
	});
});

</script>

 

JQuery 소속이기 때문에 ajax 작성시 jquery.min.js script문은 필수이다.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

jquery에서 재공하는 $.ajax()메서드를 사용한다.

url : 이동할 url (필수 요소이다.)

type

전송방식 get과 post가 있다.

get은 전송시 입력파라미터가 url에 같이 넘어가고

post는 head부에 감추어서 입력파라미터가 url로 넘어가지 않는다.

data : 요청시 파라미터로 넘어갈 문자열 또는 객체를 작성한다.

success : 요청이 성공했을 때 실행된다.

error : 요청이 실패했을때 실행된다.

complete : 요청의 성공과 실패의 상관없이 실행된다. ( == java의 finally와 비슷하다.)

 

 

url 예시 (data.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>
</head>
<body>
t1=<%=request.getParameter("t1") %><br>
t2=<%=request.getParameter("t2") %>
</body>
</html>

 

실행화면

클릭 후 오른쪽화면으로 변경됩니다.

+ Recent posts