본문 바로가기
  • 문과생의 백엔드 개발자 성장기
|Playdata_study/JavaScript

210907_jQuery_Ajax (servlet, LocalStorage)

by 케리's 2021. 9. 7.

jQuery 함수 2

 

 

  • each () 

1) 동일한 태그가 여러개 있을 때 사용, each()가 태그의 갯수만큼 호출

2) 배열에서 사용, each()가 배열안에 있는 데이터의 갯수만큼 호출

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">

</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
	$(function(){
		$('#eachBtn').on('click', function() {
			// 배열의 선언과 생성 및 초기화
			var arr = [];
			arr.push("아이유");
			arr.push("이무진");
			arr.push("장도연");
			arr.push("헨리");
		
			
		// 배열객체임을 확인 2가지 방법이 있다, 값이  여러개 each() for문과동일
			/* alert(arr.length); // 요소의 갯수 
			alert(arr.toString); */
			
  		//1.original한 방법 :: for문사용
  		// javascript 
			var str = '';
			for(var i=0; i<arr.length; i++)
				str += arr[i]+" ";
			alert(str);
			
			
			
		//2. each() 함수 사용 :: 1) 동일한 태그가 여러개 있을 때 사용, each()가 태그의 갯수만큼 호출
		// 				      2) 배열에서 사용, each()가 배열안에 있는 데이터의 갯수만큼 호출
		// jQuery
		var str = '';
		$(arr).each(function(index) {
			str += arr[index]+" ";
		});		
			alert(str);
		
			
			
		//3. each() 함수 사용
		var str = '';
		$.each(arr, function (index) {
			str += arr[index] + " ";
		});
		 alert(str); 
		 
		 	 
		 
		 //4. each() 함수 사용 == 가장 많이 활용
		 var str = '';
		 $.each(arr, function(index, item){ //index -> item에 넣어줌
			 str += item+" ";
		 });
		 alert(str);
		 
		 
		}); // click	 	
	});
</script>
</head>
<body>
	
	<input type="button" value="배열에 each() 적용하기" id="eachBtn">
</body>
</html>

 

 

 

 

 

 

  • select 와 each 함수 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">

</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
	$(function(){
		//1. 버튼 클릭하면 함수 호출
		$("#addOptionBtn").one('click', function() { //한번만 클릭하게 한다
			var arr =['아이유', '헨리', '장도연', ''];
			
			
			
/* 		//2. each() 함수 사용해서 option을 만들고 이것을 select폼에 붙인다.
		$.each(arr, function(index) { //따로 호출하기 위해 index 필요 
			//								↓ 이게 서버에 전달되는 값   ↓ 화면에 전달되는 값
			var option = '<option value = '+ arr[index] +'>' + arr[index] + '</option>';
			$('#friends').append(option);
		
		}); */
		
		
		
		//3.
		$.each(arr, function(index, item) {
			var option = '<option value = '+ arr[index] +'>' + arr[index] + '</option>';
			$('#friends').append(option);
		});
		$(this).unbind;
		
		}); //click
		
		
		
		//4. 버튼누르면 삭제 
		$('#deleteOptionBtn').click(function() {
			$('#friends>option').remove();
		})
	});
</script>
</head>
<body>
	<input type="button" value="SELECT 옵션생성" id="addOptionBtn">
	<input type="button" value="SELECT 옵션삭제" id="deleteOptionBtn">
	<select id="friends"></select>
</body>
</html>

 

옵션 생성 누르면 생김
옵션 삭제 누르면 삭제됨

 

 

 

 

 

 

 

  • Form에서 전송한 값을 Jquery에서 받아서 처리한 후 서버로 전송하는 방법

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">

</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script type="text/javascript">
	$(function(){
		// 입력된 모든값을 넘기기위해서는 선택자를  form으로 잡아야한다
		$('#frm').submit(function() { //JavaScript에서의 onsubmit 속성과 동일
			
		//1. 폼값 받는다. -- val()
		var id = $('#id').val();
		var pass = $('input[name=password]').val();
		var name = $(':text[name=name]').val();
		
		//alert(id+","+pass+","+name);
		
		//2. 서버로 연결한다. -- confirm () 창 활용
 		return confirm(name + "님의 정보를 서버로 전송할까요?");

		});
	});
</script>
</head>
<body>
<h2>Form에서 전송한 값을 Jquery에서 받아서 처리한 후 서버로 전송하는 방법</h2>
<form action="jq04_result.jsp" id="frm" name="frm">
ID : <input type ="text" name="id" id="id"><p> <!-- <p> = <br/> 2개 -->
PASSWORD : <input type ="password" name="password" id="password"><p>
NAME : <input type ="text" name="name" id="name"><p>
<!-- <button type="submit">SEND</button>  -->
<!-- button이 아님 -->
<input type="submit" value="SEND"> <!-- 선택자는 form 이다. -->
</form>
</body>
</html>

 

<!-- jq04_result.jsp -->

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h2> 정보를 출력합니다 </h2>
${param.id}님의 이름은 <br/>
${param.name} 입니다. <br/>
</body>
</html>

 

 

confirm 창

 

서버 연결 완료

 

 

 

  • Checkbox submit

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">

</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
/*
1. id, password 폼에 공란을 체크 -- 공백일때 alert 창 띄우고 포커스 맞추고, 페이지 넘어가지 않게 처리해준다.
 :: 1) required="required" 속성사용

2. checkbox에 반드시 하나 이상의 값이 체크되도록 -- 하나도 선택하지 않을 시 alert 창 띄워서 메세지
3. checkbox에 하나 이상의 값이 체크되었다면 each() 사용해서 alert로 출력하기
4. confirm 창 이용해서 "3개의 취미가 선택되었습니다. 전송하시겠습니까?" -- 확인 클릭시 전송 | 취소 

*/
	$(function(){
		$('#frm').submit(function() {
			if($('#id').val()==""){
				alert("아이디를 입력!!");
				$('#id').focus();
				return false;
			}
			if($('#password').val()==""){
				alert("패스워드 입력!!");
				$('#password').focus();
				return false;
			}
			var hobbyArr = $('input[name=hobby]:checked');
			//alert(hobbyArr.length);
			var text = "";
			 if(hobbyArr.length==0){
				alert("하나의 취미는 선택하시길 바랍니다");
				return false;
			}else{
				$.each(hobbyArr, function(index, item){
					text+=$(this).val()+" ";
				}); //each
				alert(text);
				
				return confirm("선택하신" + hobbyArr.length+"개의 취미를 전송하시겠습니까?"); 
				
			}
		});
	});
</script>
</head>
<body>
<form action="jq05_result.jsp" id="frm">
	ID <input type="text" id="id" name="id"><p>
	PASSWORD <input type="password" id="password" name="password"><p>
	
	<strong>당신의 취미를 고르세요</strong><br/><br/>
	<input type="checkbox" name="hobby" value="Reading">독서<br/>
	<input type="checkbox" name="hobby" value="Driving">드라이빙<br/>
	<input type="checkbox" name="hobby" value="Drinking">술마시기<br/>
	<input type="checkbox" name="hobby" value="Listen to Music">음악감상<br/><br/>
	
	<input type="submit" value="DATA SEND">
</form>
</body>
</html>

 

<!-- jq05_result.jsp -->

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<B>RESULT PAGE</B>
</body>
</html>

 

 

 

 

 

 

 

 


 

Ajax (Asynchronous JavaScript and XML)

 

 

Ajax는 동적인 웹 페이지를 만들기 위한 개발 기법

웹 페이지 전체를 다시 로딩하지 않고도, 웹 페이지의 일부분만을 갱신할 수 있음

즉 Ajax를 이용하면 백그라운드 영역에서 서버와 통신하여, 그 결과를 웹 페이지의 일부분에만 표시할 수 있다.

 

이때 서버와 다음과 같은 다양한 형태의 데이터를 주고받을 수 있다.

 

 - JSON

 - XML

 - HTML

 - TXT 등

 

 

 

 

 

servlet 만드는 법

 

project 오른쪽 마우스 클릭 → Servlet 클릭

 

Java package, Classname 작성 후 Next

 

Name과 URL mappings Name 확인 후 Finish (나는 기존에 만들었기 때문에 존재한다고 뜸)

 

 


 

 

 

✔ Ajax 와 jQuery  : 비동기연결

 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">

</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
	$(function(){
		$('#ajaxBtn').click(function() {
			
			/* ★ 중요 !
			
			 1. type : get, post 인지 확인하기
			 2. url : server에 어떤 page로 전송 할 것인지 확인하기
			 3. data : "name=encore" 형식으로 데이터를 담아서 전송
			
			*/ 
			
		//ajax 연결 .. 하나의 페이지에 요청부분 | 응답부분
			$.ajax({ 

		// ----- 1. 비동기 요청하는 부분
				type:"post",
				url:"Hello", // url 이름은 servlet 의 @WebServlet("/Hello") 이름과 같아야한다.
				data:"name=hyeri", // <--- 여기까지가 속성의 전부이다!
				
				
			/* type:"get"일땐 아래와 같은 형식으로 사용
				url:"HelloAjax?name=encore&pass=1234", */
				
						
		// ----- 2. 비동기 응답하는 부분
				success:function(result){
					alert(result);
				},//callback
				
 				error:function(){
					alert("응답시간이 지연되고 있습니다.. Error!!")
				},
				timeout:1000  // 1초동안 서버로 부터 응답이 없으면 에러처리 (즉 응답 대기시간을 지정할 수 있다.)
			
			/*
			
			String id = request.getParameter("id");
			request.getRequestDispatcher("resultView.jsp").forward(request, response);

			*/
			
			
			});//ajax :: 비동기부분			
		});// click
	});//ready
</script>
</head>
<body>
	<input type="button" value="Jqueryajax" id="ajaxBtn">
</body>
</html>

 

 

 

url 이름은 servlet 의 @WebServlet("/Hello") 이름과 같아야한다.

 

package servlet.ajax;

import java.io.IOException;
import java.io.PrintWriter;

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


@WebServlet("/Hello")
public class Hello extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 화면에서 넘어온 값을 받아서 console 창에 출력하는 작업
		// 오류 표시 뜬다면 import 하면됨
		PrintWriter out = response.getWriter();
		
		String name = request.getParameter("name"); //ajax 파일의 name으로 입력받아 hyeri라는 값을 출력
		System.out.println("name :" + name);
		
		
		/*
		 *  화면으로 받은 데이터를
		 *  디비 연결하는 DAO 파일의 
		 *  특정 메소드의 인자값으로 연결
		 *  
		 *  1) DAO 객체를 생성
		 *  2) dao.getMemberByName(name); ---- storage로 연결해서 값을 받음
		 *  3) Member 객체 m을 클라이언트로 응답한다. ---- json 연결
		 *  
		 * */
		
		
		// 코드 실행을 지연시키고 싶을 때
		try {
			Thread.sleep(1000); // 1초동안 지연
		} catch (InterruptedException e) {

		}
		
		
		// 다시 클라이언트로 응답 (넘어온 값을 받아서 다시 돌려줌)
		out.print(name);  // 이때 응답이 들어간다, 응답이 바로 진행되지 않고 무려 1초동안 지연시킴!
	}

}

 

 

 

 

응답시간 지연처리시 발생하는 화면

 

 

 

 

 

 

 

✔ servlet 과 ajax 비동기 (jsp) 연결

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">

</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
	$(function(){
		//버튼을 클릭하면 함수가 호출되도록 하자
		$('#ajaxBtn').click(function () {
			var id = $('#id').val(); // 폼에 입력된 id값 받아오기
		
			//비동기시작
			$.ajax({
				//요청
				type:"post",
				url:"JqueryAjax",
				data:{"id":id},  //post 일때 있어야함, {form의 이름:값}
				
				
				//응답
				success:function(result){
					$('#resultView').html(result).css('color','hotpink');
				},
			
			// 에러가 발생하면 호출되는 callback 함수를연결
				error:function(xhr, status, message){
					alert("error ::" + message)
				},
				timeout:1000
				
			}); //ajax
		}); //click
	});
</script>
</head>

<body>
ID : <input type="text" name="id" id="id">
<input type="button" value="JQueryAjax" id="ajaxBtn">

<div id="resultView"></div>
</body>
</html>

 

// url:"JqueryAjax"

package servlet.ajax;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/JqueryAjax")
public class JqueryAjax extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String id = request.getParameter("id");
		
		// 에러 
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			System.out.println("시간경과");
		}
		
		// 페이지 이동
		request.getRequestDispatcher("resultView.jsp").forward(request, response);
	}

}

 

<!-- resultView.jsp -->

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
${param.id}
</body>
</html>

 

 

 

✔ 공공데이터의  xml 파일을 활용한 ajax 활용 

 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">

</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
	$(function(){
	$('#send').on('click', function() { // 또는 $('#send').one('click', function() :: 한번만 출력
		$.ajax({
			// 요청
			type:'post',
			url:'http://localhost:9999/weather.xml', //default
			dataType:'xml', // json, xml 일때는 응답되는 데이터 타입을 지정하는 옵션
			
			// 응답
			success:function(result){
				// alert(result); // XML 객체가 리턴됨
				// alert($(result)); // XML의 <info> 객체 리턴
				// alert($(result).length); // XML의 <info> 객체 확인 -- 1 출력
				// alert($(result).find("list").length); // XML의 <list> 객체 확인 -- 3 출력
				
				var str = ""; // 복합연산자
				
				//list 에 each() 적용
				$(result).find('list').each(function(index, item) {
					var region = $(this).find('region').text();//html() 과 동일
					var wind =  $(this).find('wind').text();
					var temp =  $(this).find('temp').text();
					var rain =  $(this).find('rain').text();
					
				// <tbody></tbody> 출력!
					str +='<tr>';
					str +='<td>'+region+'</td>';
					str +='<td>'+wind+'</td>';
					str +='<td>'+temp+'</td>';
					str +='<td>'+rain+'</td>';
					str +='</tr>';
					
				});//each
				
			//부착하기 전에 이미 있는 것들을 삭제한다
				$('tbody tr:gt(0)').remove();//one을 안해주면 이렇게라도 해야한다.
				
			//위의 str내용을 tbody에 부착한다 :: append()
				$('tbody').append(str);
			},
			
			error:function(err){
				alert("오류 발생 ======>" + err);
			}
			
		});//ajax
	});//one
	});
</script>
</head>
<body>
<h2>====== OPEN API 공공데이터 가져오기 ======</h2>
<a href="#" id="send">XML 데이터 서버로 전송 요청하기</a>
<P></P>
<table>
	<thead>
		<tr>
			<th>지역</th><th>풍속</th><th>온도</th><th>강수량</th>
		</tr>
	</thead>
	
	<tbody>
		<!--  $('tbody').append(str); -->
	</tbody>
	
</table>
</body>
</html>

 

<!-- weather.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<!-- java 에서 모든 root 격이 되는 파일 :: xml -->
<info>
	<list>
		<region>서울</region>
		<wind>37</wind>
		<temp>25</temp>
		<rain>66</rain>
	</list>
	
	<list>
		<region>부산</region>
		<wind>17</wind>
		<temp>15</temp>
		<rain>86</rain>
	</list>
	
	<list>
		<region>대전</region>
		<wind>77</wind>
		<temp>05</temp>
		<rain>16</rain>
	</list>
</info>

 

 

 

 

 

 

✔ json 파일을 활용한 ajax 활용 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">

</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
	$(function(){
		$('#jsonBtn').click(function() {
			
			//요청
			$.ajax({
				type:'post',
				url:'JsonServlet',
				dataType:'json', //dataType은 요청과는 상관없이 응답시 리턴되는 데이터 타입을 지정한다.
				
			//응답
			success:function(data){ //data라는 변수로 json객체를 담아놓겠다. 
				//alert(data);
			
			//resultView 영역에 출력
				$('#resultView').html('<h2><font color = hotpink>' + data.region+ "의 현재 온도는" + data.temp + '입니다.</font></h2>')
				}
			}); //ajax
		}); //click
	});
</script>
</head>
<body>
	<h2>JSON TEST</h2>
	<input type="button" value="json-object" id="jsonBtn">
	<span id="resultView"></span>
</body>
</html>

 

// JsonServlet.java

package servlet.ajax;

import java.io.IOException;
import java.io.PrintWriter;

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

import org.json.JSONObject;


@WebServlet("/JsonServlet")
public class JsonServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		PrintWriter out = response.getWriter();
		/* 
		 * 배포한 json.jar을 WEB-INF \\ lib \\ json.jar 을 넣자
		 * 후에 ctrl + shift + 영문자 O 클릭 → import 자동생성 된다.
		 
		 * */
			
		// 1.JSON 객체를 하나 생성 .. json.jar 가 있어야한다.
		// 비동기에서 응답하는 데이터 타입을 객체로 할때 json을 사용한다.
			
		JSONObject json = new JSONObject();
		
		json.put("region", "Busan");
		json.put("wind", 34);
		json.put("temp", 27);
		json.put("rain", 10);
		
		//응답한다 -- 객체를 응답한다,
		
		out.print(json);	
		
		
	}

}

 

 

 

✔ java (domain) 파일을 활용한 ajax 활용 

 

 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">

</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
	$(function(){
		$('#jsonBtn').click(function() {
			
			//요청
			$.ajax({
				type:'post',
				url:'JsonServlet',
				dataType:'json', //dataType은 요청과는 상관없이 응답시 리턴되는 데이터 타입을 지정한다.
				
			//응답
			success:function(data){ //data라는 변수로 json객체를 담아놓겠다. 
				//alert(data);
			
			//resultView 영역에 출력
				//$('#resultView').html('<h2><font color = hotpink>' + data.region+ "의 현재 온도는" + data.temp + '입니다.</font></h2>')
			
			// Weather.java :: domain 활용
				$('#resultView').html("<h2><font color = #514964>" + data.weather + "</font></h2>")	
			}
			}); //ajax
		}); //click
	});
</script>
</head>
<body>
	<h2>JSON TEST</h2>
	<input type="button" value="json-object" id="jsonBtn">
	<span id="resultView"></span>
</body>
</html>

 

// JsonServlet.java

package servlet.ajax;

import java.io.IOException;
import java.io.PrintWriter;

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

import org.json.JSONObject;

import domain.Weather;


@WebServlet("/JsonServlet")
public class JsonServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		PrintWriter out = response.getWriter();
		/* 
		 * 배포한 json.jar을 WEB-INF \\ lib \\ json.jar 을 넣자
		 * 후에 ctrl + shift + 영문자 O 클릭 → import 자동생성 된다.
		 
		 * */
			
	// 1.JSON 객체를 하나 생성 .. json.jar 가 있어야한다.
		// 비동기에서 응답하는 데이터 타입을 객체로 할때 json을 사용한다.
			
		JSONObject json = new JSONObject();
		
		/*
		 * json.put("region", "Busan"); 
		 * json.put("wind", 34); 
		 * json.put("temp", 27);
		 * json.put("rain", 10);
		 * 
		 */
		
		
		
	// 2. Weather 객체를 생성
		Weather weather = new Weather("NYC", 44, 23, 78);
		
		//Weather weather = new Weather(region, wind, temp, rain); 이런 식으로 값을 주입한다.
		json.put("weather",weather);
		
		
		//응답한다 -- 객체를 응답한다,
		out.print(json);	
		
		
	}

}

 

package domain;
//모델, 인스턴스, dto
public class Weather {
	private String region;
	private int wind;
	private int temp;
	private int rain;
	
	//source -> 아래에서 세번째
	
	// --- 명시적 생성자
	public Weather(String region, int wind, int temp, int rain) {
		super();
		this.region = region;
		this.wind = wind;
		this.temp = temp;
		this.rain = rain;
	}
	
	
	// --- 기본 생성자
	public Weather() {}


	public String getRegion() {
		return region;
	}


	public void setRegion(String region) {
		this.region = region;
	}


	public int getWind() {
		return wind;
	}


	public void setWind(int wind) {
		this.wind = wind;
	}


	public int getTemp() {
		return temp;
	}


	public void setTemp(int temp) {
		this.temp = temp;
	}


	public int getRain() {
		return rain;
	}


	public void setRain(int rain) {
		this.rain = rain;
	}


	@Override
	public String toString() {
		return "Weather [region=" + region + ", wind=" + wind + ", temp=" + temp + ", rain=" + rain + "]";
	}
	
	
}

 

 

 


 

LocalStorage

 

 

사용자 (로컬)에 저장하는 임시저장소.

브라우저를 종료해도 유지되는 데이터로, 명시적으로 지우지 않는 한 영구적으로 저장

windows 전역 객체의 LocalStorage라는 컬렉션을 통해 저장, 조회가 이루어진다.

지속적으로 필요한 정보를 저장하기에 좋다. (ex. 자동 로그인 등)

키, 벨류 형식을 사용한다.

 

 

 

 

 

 

✔ LocalStorage API

 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>LocalStorage API</title>
<style type="text/css">

</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
	$(function(){
		//--- 선택자와 함수 버튼을 연결해라!
		
		//1. 저장버튼 클릭시 :: setItem()
		$('#saveBtn').click(function() {
			// --- 사용방법 3가지 
			localStorage.setItem("key1", "안녕");
			localStorage.key2="HI"; // 형식 :: key2,hi (key, value)
			localStorage["key3"] = "HELLO";
		})
		
		
		//2. 삭제버튼 클릭시 :: removeItem()
		$('#deleteBtn').click(function() {
			localStorage.removeItem("key1");
		})
		
		
		//3. 전체삭제 클릭시 :: clear()
		$('#deleteAllBtn').click(function() {
			localStorage.clear(); // storage안에 모든 데이터를 지우기 때문에 조심!
		})
		
		
		//4. 내용보기 클릭시 :: getItem()
		$('#showInfoBtn').click(function() {
			alert(localStorage.getItem("key1"))
		})
	});
</script>
</head>
<body>
<h2>LocalStorage Test</h2>
<button id="saveBtn">저장</button>
<button id="deleteBtn">삭제</button>
<button id="deleteAllBtn">전체삭제</button>
<button id="showInfoBtn">내용보기</button>
</body>
</html>

 

 

 

1. 저장
2. 삭제
3. 전체삭제

 

4. 내용보기

 

 

 

✔ 찜 리스트 만들기

 

<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8" />
<title>ENCORE 극장</title>
<link rel="stylesheet" href="css/layout.css" type="text/css" media="screen" />
<style type="text/css">
table { float : left ; 
		padding-left: 20px;
}
.poster {
	width : 150px;
	height : 150px;	
}
table caption{
	font-size: 24px;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript">

// 선택자 연결 :: 미리보기를 클릭하면 함수가 호출되도록 한다.
$(function(){
	$('[name=vplay]').click(function() {
		var playname=$(this).val();
		$('#video').attr('src',playname);
		$('#video').get(0).play();
	});
	
 	// localhost 기능
	$('[name=cartinsert]').click(function() {
		localStorage.setItem($(this).attr('id'), $(this).val());
		// 해당 값들의 속성값을 알아오기 위해서는 attr 함수 사용
		// setItem (key, value)
	}) 
	
});
</script>
</head>
<body>
	<header>
		<h1>Encore 극장</h1>
	</header>
	<nav>
		<ul>
			<li class="selected"><a href="#">최신 DVD</a></li>
			<li class="selected"><a href="#">DVD 목록</a></li>
			<li class="selected"><a href="02_jimList.html">찜 리스트</a></li>
		</ul>
	</nav>
	<section id="intro">
		<header>
			<h2>무공해 힐링 시네마</h2>
		</header>
		<p>무공해 힐링 시네마는 새로운 개념의 영화장르의 한가지를 말하는 것입니다. 지친 영혼을 위한 휴식을 주는 영화나,
			마음을 정화시키고 치유하는 힘을 가진 영화들 ... .</p>
	</section>
	<div id="content">
			<article class="blogPost">
				<section>
				<!-- video tag를 실행시키면된다. -->
					<video width="400" height="300" controls="controls" poster="img/poster.jpg" id="video">
					</video>
				</section>
				<section>
				<table>
					<tr>
					<td><h2>쿵푸팬더</h2><p/>
					<img class="poster" src="img/movie_image2.jpg" /><p/>
					<button name="vplay" value="media/KungFuPanda_Sample.mp4">미리 보기</button>
					<button name="cartinsert" id="1001" value="쿵푸팬더,img/movie_image2.jpg,3000" >찜하기</button>
					</td>
					<td>
					<h2>어벤져스</h2><p/>
					<img  class="poster" src="img/avengers.jpg" /><p/>
					<button name="vplay" value="media/avengers.mp4">미리 보기</button>
					<button name="cartinsert" id="1002" value="어벤져스,img/avengers.jpg,3000">찜하기</button>
					</td>
					<td>
					<h2>빅벅</h2><p/>
					<img  class="poster"  src="img/BigBuck.jpg" /><p/>
					<button name="vplay" value="media/BigBuck.theora.ogv">미리 보기</button>
					<button name="cartinsert" id="1003" value="빅벅,img/BigBuck.jpg,2500">찜하기</button>
					</td>
					</tr>
				</table>
				</section>
			</article>
	</div>
	<footer>
		<div>
			<section id="about">
				<h3>About</h3>
				<p>
					서울 남부터미널 지점. <br /> <a href="#">hyeri@encore.com</a>
				</p>
			</section>
			<section id="security">
				<h3>개인정보 취급 방침</h3>
				<ul>
					<li><a href="#">개요</a></li>
					<li><a href="#">문의처</a></li>
				</ul>
			</section>
			<section id="notice">
				<h3>공지사항</h3>
				<ul>
					<li><a href="#">오시는 길</a></li>
					<li><a href="#">오류시 문의사항</a></li>
				</ul>
			</section>
		</div>
	</footer>
</body>
</html>

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
	.poster{ width:90px; height:90px;}
</style>
<link type="text/css" rel="stylesheet" href="css/basic.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
	$(function(){
		refreshPage(); // 함수호출
		
	// 미래의 삭제버튼을 위해 content 영역을 선택자로 지정하고 click을 했을때 deleteCartStorage 함수가 실행된다.
		$('#content').on('click', '#deleteCart', deleteCartStorage);
	});
	
 	//javaScript 선언적 함수 선언방식
	function refreshPage() {
		var html="";
		var totalPrice = 0; 
		
	//for문을 사용해서 localStorage 안에 있는 값들을 뽑아온다.
		for(var key in localStorage){
			if(key=='length')break;
			
			var data = localStorage.getItem(key).split(","); //어벤저스, img/aaa.jpg, 3000
			
			// image[1], key, 영화제목[0], 금액[2]
			// class='poster' ::  크기조정을 위해 추가!
			// id=deleteCart :: 삭제
			html += "<tr><td><img class='poster' src="+data[1]+"></td><td>"+key
			+"</td><td>"+data[0]+"</td><td>"+data[2]+
			"</td><td><button id=deleteCart value=" + key + ">삭제</button></td></tr>";
			
			//data[2] 는 string으로 나오기 때문에 int로 바꾼후 totalPrice로 따로해줘야한다.
			totalPrice += parseInt(data[2]); 
			
		}//for
		
		$('#content').html(html);
		$('#price').html("주문가격 :" + totalPrice);
	} 
 	
 	// 삭제를 위한 선언적 함수
 	
 	function deleteCartStorage() { //localStorage에 있는 key값을 삭제
		var y = confirm($(this).val() + "을 정말 삭제 하시겠습니까?");
 		if(y){
 			localStorage.removeItem($(this).val());
 			refreshPage();
 		}
	}
 	
</script>
</head>
<body>
	<article class="main">
		<section>
			<table width="80%" align="cener">
			<!-- table 제목 -->
			<caption class="caption">찜 리스트</caption>
				<thead>
					<tr>
						<th>이미지</th><th>상품번호</th><th>상품이름</th><th>가격</th><th>삭제</th>
					</tr>
				</thead>
				<!-- 내용 -->
				<tbody id="content">
					<!-- $('#content').html(html); -->
				</tbody>
			</table>
		</section>
		
		<section class="totalprice" id="price">
			<!-- $('#price').html("주문가격 :" + totalPrice); -->
		</section>
		
		<section class="link">
			<table align="center">
				<tr>
					<td>
						<a href = "#">주문하러가기</a>
						<a href = "index.html">DVD 목록보기</a>
					</td>
				</tr>
			</table>
		</section>
	</article>
</body>
</html>
/* layout.css */

* {
	margin: 0;
	padding: 0;
}

/* Tell the browser to render HTML 5 elements as block */
header, footer, section, aside, nav, article {
	display: block;
}

body {
	margin: 0 auto;
	padding: 22px 0;
	width: 940px;
	font: 13px/22px Helvetica, Arial, sans-serif;
	background: #F0F0F0;
}

h1, h2 {
	font-size: 28px;
	padding: 22px 0;
}

h3 {
	font-size: 18px;
	line-height: 22px;
	padding: 11px 0;
}

p {
	padding-bottom: 22px;
}



nav {
	position: absolute;
	left: 0;
	width: 100%;
	background: url("../img/nav_background.png");
}

	nav ul {
		margin: 0 auto;
		width: 940px;
		list-style: none;
	}

		nav ul li {
			float: left;
		}
		
			nav ul li a {
				display: block;
				margin-right: 20px;
				width: 140px;
				font-size: 14px;
				line-height: 44px;
				text-align: center;
				text-decoration: none;
				color: #777;
			}
			
				nav ul li a:hover {
					color: #fff;
				}
			
			nav ul li.selected a {
				color: #fff;
			}
			
			nav ul li.subscribe a {
				margin-left: 22px;
				padding-left: 33px;
				text-align: left;
				background: url("img/rss.png") left center no-repeat;
			}



#intro {
	position: relative;
	margin-top: 66px;
	padding: 39px;
	background: #028002 url("img/intro_background.png") repeat-x;
	height : 50px;
	width: 100%
	
	/* Background-size not implemented yet */
	-webkit-background-size: 100%;
	-o-background-size: 100%;
	-khtml-background-size: 100%;

	
	/* Border-radius not implemented yet */
	-moz-border-radius: 22px;
	-webkit-border-radius: 22px;
}

	#intro h2, #intro p {
		position: relative;
		z-index: 9999;
	}
	
	#intro h2 {
		padding: 0 0 22px 0;
		font-weight: normal;
		color: #fff;
	}
	
	#intro p {
		padding: 0;
		color: #d9f499;
	}
	
	#intro img {
		position: absolute;
		top: 0;
		right: 0;
		width: 653px;
		height: 100%;
	
		/* Border-radius not implemented yet */
		-moz-border-radius: 22px;
		-webkit-border-radius: 22px;
	}

 

/* basic.css */

@CHARSET "EUC-KR";
.top {position: relative;  top: 50px;  right:30px; }
.main{position: relative;  top: 100px; width: 70%; margin: 0 auto;  }
.bottom{
	position: relative;  
	top: 10px;
	width:200px;
	margin: 0 auto; 
	
	}
.link{position: relative;  top: 10px; width: 70%; margin: 0 auto; }
.caption{  background-color:#222;
		   vertical-align: middle;   
		   text-align: center; 
		   padding: 20px;
		   font-size: 20px;
		   color: #fff;
		   }
.totalprice{  
	       background-color:orange;  
	       height:35px;  
	       vertical-align: middle;   
	       text-align: right;  
	       padding: 5px 20px;
	       width:75%;
	       margin: 0 auto;
	       }
thead tr {
	height: 50px;
	margin: 10px;
}

.orderviewbox{	position: absolute;  top: 150px;
   			width: 70%;	height: 300px;  
   			vertical-align: middle;    }
.orderview{border: 1px  solid  orange;	width: 350px;  height: 100px;  text-align: center; vertical-align: middle;   }

 

 

 

 

 

setItem :: 찜하기 누르면 데이터 저장됨

 

 

찜리스트로 가면 목록이 나온다

 

 

 

 

 

 

댓글