HTML_JS(Sol)/jQuery_Ajax
210618_1(jQuery_ajax_json)
너굴셉
2021. 6. 18. 17:42
json
javascript object notation : 데이터 포맷 방법
JSON은 속성-값 쌍 또는 "키-값"쌍으로 이루어진 데아터 오브젝트를
전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는
개방형 표준 포맷이다. 비동기 브라우저/서버 통신을 위해,
넓게는 XML을 대체하는 주요 데이터 포맷이다.
활용법
1. { 로 시작하고 } 로 끝난다.
2. { } 안에 키 : 밸류 로 지정한다
3. 키 : 밸류가 반복되면 , 쉼표로 구별한다.
밸류가 반복 되는 구조는 k : [v, v, v, v,]형태가 된다.
4. 같은 키 : 밸류 가 반복되는 { }들은 , 쉼표 구별하여 [ ] 로 감싼다. ===> k : [{k:v},{k:v},{k:v}]
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<title>json(1)</title>
<!-- 모바일 웹 페이지 설정 -->
<link rel="shortcut icon" href="img/icon.png" />
<link rel="apple-touch-icon" href="img/icon.png" />
<!-- 모바일 웹 페이지 설정 끝 -->
<!--[if lt IE 9]>
<script src="js/html5shiv.js"></script>
<![endif]-->
<!-- 공통 css -->
<link rel="stylesheet" type="text/css" href="css/reset.css"/>
<link rel="stylesheet" type="text/css" href="css/common.css"/>
<!-- jQuery Framework 참조하기 -->
<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
<!-- 사용자 스크립트 블록 -->
<script type="text/javascript">
$(function(){
$("#mybtn").click(function(){
$.ajax({
url : "ajax/json/04.json",
type : "get",
dataType : "json",
cache : false,
timeout : 30000,
success : function(json){
//파라미터로 전달되는 객체는 JSON 자체이다.
var title = json.school.subject.title;
var time = json.school.subjecttime;
var teacher = json.school.subject.teacher;
/** 요소의 동적 생성 및 데이터 출력구현*/
var ul = $("<div>");
var li1 = $("<p>").html(title);
var li2 = $("<p>").html(time);
var li3 = $("<p>").html(teacher);
$("#result").append(ul.append(li1).append(li2).append(li3));
},
error: function(xhr, textStatus, errorThrown){
$("div").html("<div>" + textStatus + " (HTTP-" + xhr.state + " / " + errorThrown + ")</div>" );
}
});
});
})
</script>
</head>
<body>
<h1 class="title">$.ajax() 함수를 사용한 JSON데이터 읽기 (1)</h1>
<div class="exec">
<input type="button" value="JSON데이터 가져오기" id="mybtn"/>
</div>
<div class="console" id="result"></div>
</body>
</html>
jason
{
"school": {
"subject": {
"title": "Javascript+jQuery+Ajax",
"time": "매주 월/수/금 오후 7시30분~10시20분",
"teacher": "주영아"
}
}
}
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<title>json(2)</title>
<!-- 모바일 웹 페이지 설정 -->
<link rel="shortcut icon" href="img/icon.png" />
<link rel="apple-touch-icon" href="img/icon.png" />
<!-- 모바일 웹 페이지 설정 끝 -->
<!--[if lt IE 9]>
<script src="js/html5shiv.js"></script>
<![endif]-->
<!-- 공통 css -->
<link rel="stylesheet" type="text/css" href="css/reset.css"/>
<link rel="stylesheet" type="text/css" href="css/common.css"/>
<!-- jQuery Framework 참조하기 -->
<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
<!-- 사용자 스크립트 블록 -->
<script type="text/javascript">
$(function(){
$("#mybtn").click(function(){
$.ajax({
url : "ajax/json/05.json",
type : "get",
dataType : "json",
cache : false,
timeout : 30000,
success : function(json) {
//배열까지 접근한다.
var subject = json.school.subject;
//배열의 길이 만큼 반복문 처리한다.
for(var i=0; i<subject.length; i++){
//반복처리 안에서 i 번째 요소는 JSON데이터 자체이다.
var title = subject[i].title;
var time = subject[i].time;
var teacher = subject[i].teacher;
/** 결과를 출력하기 위한 동적 요소의 생성 */
var ul = $("<div>");
var li1 = $("<p>").html(title);
var li2 = $("<p>").html(time);
var li3 = $("<p>").html(teacher);
ul.append(li1).append(li2).append(li3);
$("#result").append(ul);
$("#result").append("<hr />")
}; //for문의 끝
},
error: function(xhr, textStatus, errorThrown){
$("div").html("<div>" + textStatus + " (HTTP-" + xhr.state + " / " + errorThrown + ")</div>" );
}
});
});
});
</script>
</head>
<body>
<h1 class="title">$.ajax() 함수를 사용한 JSON데이터 읽기 (2)</h1>
<div class="exec">
<input type="button" value="JSON 데이터 가져오기" id="mybtn"/>
</div>
<div class="console" id="result"></div>
</body>
</html>
{
"school": {
"subject": [
{
"title": "Javascript+jQuery+Ajax",
"time": "매주 월/수/금 오후 7시30분~10시20분",
"teacher": "주영아"
},
{
"title": "HTML5+CSS3 기반의 반응형 웹",
"time": "매주 화/목 오후 7시30분~10시20분",
"teacher": "주영아"
},
{
"title": "Java 입문에서 활용까지",
"time": "매주 화/목 오후 7시30분~10시20분",
"teacher": "이광호"
}
]
}
}
셀렉터
div.exec:eq(0) div태그중에 exec라는 클래스중에 첫번째
div.exec:eq(1) div태그중에 exec라는 클래스중에 두번째
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<title>article</title>
<!-- 모바일 웹 페이지 설정 -->
<link rel="shortcut icon" href="img/icon.png" />
<link rel="apple-touch-icon" href="img/icon.png" />
<!-- 모바일 웹 페이지 설정 끝 -->
<!--[if lt IE 9]>
<script src="js/html5shiv.js"></script>
<![endif]-->
<!-- 공통 css -->
<link rel="stylesheet" type="text/css" href="css/reset.css"/>
<link rel="stylesheet" type="text/css" href="css/common.css"/>
<!-- jQuery Framework 참조하기 -->
<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
<!-- plugin 참조 -->
<script type="text/javascript" src="plugins/tmpl/jquery.tmpl.min.js"></script>
<style type="text/css">
table {
display: block;
width: 100%;
font-size: 14px;
text-align: center;
}
table tr:after {
content: '';
display: block;
float: none;
clear: both;
}
table .left {
text-align: left;
}
thead, tbody, tr {
display: block;
width: 100%;
}
td, th {
display: block;
float: left;
padding: 10px 0;
}
table thead {
border-bottom: solid 2px #285E8E;
font-weight: bold;
}
table tbody tr {
border-bottom: 1px dotted #ccc;
}
.example table .no {
width: 10%;
}
.example table .subject {
width: 60%;
}
.example table .hit {
width: 10%;
}
.example table .date {
width: 20%;
}
</style>
<!-- 템플릿으로 사용할 HTML태그 -->
<script id="itemTemplate" type="text/x-jquery-tmpl">
<tr>
<td class="no">${no}</td>
<td class="left subject">${subject}</td>
<td class="hit">${hit}</td>
<td class="date">${date}</td>
</tr>
</script>
<!--// 템플릿 끝 -->
<!-- 사용자 스크립트 블록 -->
<script type="text/javascript">
$(function(){
/**get방식으로 json데이터의 요청*/
$.get("ajax/json/bbs.jsp", {}, function(json){
//결과가 전달되는 파라미터에 읽어온 데이터가 담겨 있으며,
//JSON이므로 별도의 추출 과정 없이 점(.)으로 데이터 계층을 연결하여 사용할 수 있다.
/**제목, 내용, 천제 글 수를 화면에 출력*/
$("h1.title").html(json.title);
$("div.exec:eq(0)").html(json.description);
$("div.exec:eq(1) > span").html(json.total);
//글 항목을 담고 있는 배열을 템플릿에 통채로 지정
var tmpl = $("#itemTemplate").tmpl(json.item);
//화면에 출력
$("div.example > table > tbody").append(tmpl);
});
});
</script>
</head>
<body>
<!--게시판 제목이 출력될 곳-->
<h1 class="title"></h1>
<!-- 게시판 설명이 출력될 곳-->
<div class="exec"></div>
<div class="exec">
<!--게시물 수 출력될 곳 -->
총 게시물 수 : <span></span>개
</div>
<div class="example">
<table>
<thead>
<tr>
<th class="no">번호</th>
<th class="subject">제목</th>
<th class="hit">조회수</th>
<th class="date">작성일시</th>
</tr>
</thead>
<tbody>
<!--목록이 출력될 곳 -->
</tbody>
</table>
</div>
</body>
</html>
{
"title": "Javascript + jQuery + Ajax 완벽가이드",
"description": "그린IT학원에서 진행중인 Javascript 강의 학생용 자료 입니다. 각 게시판의 다운로드 권한은 매 강의 개강시마다 부여됩니다.",
"total": 4,
"item": [
{
"no": "공지",
"subject": "'Javascript + jQuery + Ajax 완벽가이드' 강의 자료실 입니다.",
"hit": 3,
"date": "2013.10.29"
}, {
"no": 3,
"subject": "Javascript + jQuery + Ajax 완벽가이드 3일차 강의자료 입니다.",
"hit": 6,
"date": "2013.11.08"
}, {
"no": 2,
"subject": "Javascript + jQuery + Ajax 완벽가이드 2일차 강의자료 입니다.",
"hit": 15,
"date": "2013.11.07"
}, {
"no": 1,
"subject": "Javascript + jQuery + Ajax 완벽가이드 1일차 강의자료 입니다.",
"hit": 19,
"date": "2013.11.05"
}
]
}
<%@ page language="java" contentType="application/json; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" import="java.sql.*" %>
<%
/*
create table bookboard (
no int(7) auto_increment primary key,
subject varchar(30),
hit int(5),
date datetime
) engine=innodb default charset='uft-8';
insert into bookboard values (null, '제목1',0,now());
insert into bookboard values (null, '제목2',10,now());
insert into bookboard values (null, '제목3',20,now());
insert into bookboard values (null, '제목4',30,now());
insert into bookboard values (null, '제목5',40,now());
*/
String message="";
Class.forName("org.gjt.mm.mysql.Driver");
String url = "jdbc:mysql://localhost:3306/jspdb?useUnicode=true&characterEncoding=euckr";
String user = "jspuser";
String pswd = "1234";
Connection conn = DriverManager.getConnection(url,user, pswd);
Statement stmt = conn.createStatement();
String sql = " select count(*) from bookboard ";
ResultSet rs = stmt.executeQuery(sql);
int count = 0;
if (rs.next()) count = rs.getInt(1);
sql = " select no,subject,hit,date from bookboard ";
rs = stmt.executeQuery(sql);
int no = 0;
String subject = "";
int hit = 0;
String date = "";
%>
{
"title": "Javascript + jQuery + Ajax 완벽가이드",
"description": "솔데스크에서 진행중인 Javascript 강의 학생용 자료 입니다. 각 게시판의 다운로드 권한은 매 강의 개강시마다 부여됩니다.",
"total": <%=count%>,
"item": [
<%
int cnt = 0;
String comma = "";
while (rs.next()) {
no = rs.getInt("no");
subject = rs.getString("subject");
hit = rs.getInt("hit");
date = rs.getString("date");
if(cnt< count-1) comma="," ;
else comma="";
%>
<%= "{ \"no\": "+no+"," %>
<%="\"subject\": \""+subject+"\"," %>
<%="\"hit\":"+hit+"," %>
<%="\"date\" : \""+date+"\"}"+comma+"" %>
<%
cnt++;
}
%>
]
}
<%
rs.close();
stmt.close();
conn.close();
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<title>json(1)</title>
<!-- 모바일 웹 페이지 설정 -->
<link rel="shortcut icon" href="img/icon.png" />
<link rel="apple-touch-icon" href="img/icon.png" />
<!-- 모바일 웹 페이지 설정 끝 -->
<!--[if lt IE 9]>
<script src="js/html5shiv.js"></script>
<![endif]-->
<script type="text/javascript">
var ju ={
"name" : "주영아",
"age" : 19,
"gender" : "여자",
"visual" : "이쁨"
};
document.write("<h1>" + ju.name +"</h1>");
document.write("<h1>" + ju.age +"</h1>");
document.write("<h1>" + ju.gender +"</h1>");
document.write("<h1>" + ju.visual +"</h1>");
</script>
</head>
<body></body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<title>json(2)</title>
<!-- 모바일 웹 페이지 설정 -->
<link rel="shortcut icon" href="img/icon.png" />
<link rel="apple-touch-icon" href="img/icon.png" />
<!-- 모바일 웹 페이지 설정 끝 -->
<!--[if lt IE 9]>
<script src="js/html5shiv.js"></script>
<![endif]-->
<script type="text/javascript">
function initCompany(){
//회사 정보를 표현하는 데이터 구조를 JSON으로 정의
// 하나의 JSON 데이터 안에는 일반 변수와 배열 데이터가 공존할 수 있다.
var company = {
"name" : "(주)굿모닝컴퍼니",
"since" : 2013,
"department" : ["기획팀", "영업팀", "디자인팀", "개발팀"],
"biz" : ["소프트웨어개발", "통신판매업", "위치정보서비스"]
};
//회사이름 출력하기
document.getElementById("name").innerHTML = company.name;
//설립년도 출력하기
document.getElementById("since").innerHTML = company.since;
//주요 사업 부서를 출력하기 위하여 배열을 반복문으로 읽는다.
var dept_li="";
for(var i=0; i<company.department.length; i++){
dept_li += "<li>"+company.department[i]+"</li>";
}
document.getElementById("department").innerHTML = dept_li;
//주요 사업 분야를 출력하기 위하여 배열을 반복문으로 읽는다.
var biz_li="";
for(var i=0; i<company.biz.length; i++){
biz_li += "<li>" + company.biz[i] + "</li>";
}
document.getElementById("biz").innerHTML = biz_li;
}
</script>
</head>
<body onload="initCompany()">
<h1 id="name"></h1>
<p>
<strong>설립년도 :</strong><span id="since"></span>
</p>
<h2>주요 사업 부서</h2>
<ul id="department"></ul>
<h2>주요 사엽 분야</h2>
<ul id="biz"></ul>
</body>
</html>