SlideShare a Scribd company logo
1 of 35
Download to read offline
처음배우는
 자바스크립트,
 제이쿼리
#4
 AJAX
 를
 이용한
 쇼핑몰
 검색
ABCD,
 스노우키위
 한성일
GOAL
• AJAX 설명
• AJAX 를 이용한 쇼핑몰 검색
• AJAX 를 이용한 로또 프로그램
1. 준비
REST CLIENT
• Rest Client 툴은 API 값을 전달하고 볼 때
편리하도록 되어있습니다.
REST CLIENT
1
2
3 http://abcds.kr/study/daum.php?q=가방
Advanced Rest Client
를 설치합니다.
앱을 설치합니다.
크롬 앱스토어를 실행합니다.
브라우져에 다음과 같이 입력합니다.
REST CLIENT
4 결과를 확인합니다.
동기와 비동기
일반적으로 순차적으로 실행됩니다.
앞에게 끝나면 다음것으로 다음것으로..
동기(synchronous) 방식 이라고 합니다.
안정성 측면에서 좋지만 로딩이 완료되면
다시 통신을 하려면 전체를
다시 로드해야하며 전체 로딩을 기다려야
하기에 실행 속도가 느려집니다.
abcd.c
모듈 1
모듈 2
모듈 3
동기와 비동기
모듈 1
비동기(asynchronous) 모듈 단위로 서버에 개별적
요청 합니다. 요청 결과를 callback 함수가 받아 처리합니다.
AJAX 는 일반적으로 비동기통신을 합니다..
화면전환이 없이 실행되는 경우 AJAX 일 가능성이 높습니다.
개별 서버 통신이기에 작업이 끝나는 시간을
정확하게 알 수 없습니다.
모듈 2
모듈 3
…..
abcd.js
Callback 1
서버 통신
Callback 2
동기와 비동기
로드시간
2. JQUERY AJAX
$.ajax({
url: http://www.abcds.kr/study/s3.php,
type: “GET,
dataType : “json”,
data : {
id : “사용자 아이디”,
pass : “사용자 비밀번호”
},
success : function(data) {
var obj = $.parseJSON(data);
obj.id;
obj.pass;
}
error : function (request, status, error) {
alert(request.responseText);
}
});
$.AJAX
jsonp 라는 형태도 있지만 여기서는 설명하지 않겠습니다.
* jQuery.ajax() 설명
파라미터 설명
url : 호출 URL
dataType : json, xml, jsonp
type : 서버 요청 방법 (GET, POST)
success : 성공했을때
data 형태의 return 값을 받음
error : 실패 핸들링
전달 데이터
{'id':'jamie', 'pass': '1234'}
2. 추첨시간
개근상 추첨시간
3. 추첨프로그램 구현
프로그램 구조
!DOCTYPE html
html
head lang=ko
meta charset=UTF-8
title추첨 프로그램/title
script src=http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js/script
style … /style
/head
body
form … /form
script … /script
/body
lottery.html
CSS STYLE
body {
text-align: center;
padding-top: 50px;
}
.add_button {
width: 130px;
background-color: azure;
padding: 2px;
margin: 2px;
}
.go_button {
width: 130px;
background-color: azure;
padding: 10px;
margin: 10px;
}
.name_input {
width: 130px;
margin: 2px;
}
.message {
margin: 10px;
}
head
style
여기에 위치
/style
/head
FORM
form id=lotto_form
h1추첨 시간/h1
div id=main
div
div id=name_div!-- 이름입력 --/div
input class=add_button type=button id=add value=“추가”/
/div
div
input class=go_button type=button id=go value=GO! /
/div
/div
div class=message id=message!-- 결과출력 --/div
div id=loading style=display:none 
img src=lotto.gif /
/div
div id=fire style=display:none 
img src=fire.gif /
/div
/form
body 와 /body 사이에 위치, 사용자 입력 폼
자바스크립트
script
$(document).ready(function(){
$(#add).click(function(){
$(#name_div).append(divinput class='name_input' type='text'
name=‘array[]' //div);
});
$(#go).click(function() {
if ($('#first').val() != ) {
$('#loading').show();
$('#main').hide();
}
$.ajax({
url : http://abcds.kr/study/lottery.php,
type : GET,
data : $(#lotto_form).serialize(),
success: function(data) {
var returned_data = JSON.parse(data);
// 5초후 출력 의도적인 딜레이
setTimeout(function(){complete(returned_data.message);},5000);
}
});
function complete(message) {
$('#loading').hide();
$('#message').html(message);
$('#fire').show();
}
});
});
/script
설명
$(“#name_div”).append(“div.../div);
data : $(#lotto_form).serialize(),
setTimeout(function(){complete(returnedData.message);},5000);
function complete(message) {
$('#loading').hide();
$('#message').html(message);
$('#fire').show();
}
name_div엘리먼트에는 html 을 넣습니다.
동적으로 엘리먼트를 추가할 수 있습니다.
데이터로 폼 전체를 넘깁니다.
폼값을 일일이 넘기지 않아도 되니 간편합니다.
5000 (5초) 동안 멈추고 comlete 함수를 호출합니다.
이때 returned_data.message 값도 함께 넘겨줍니다.
4. 다음 API 를 이용한
쇼핑 검색 프로그램 개발
DAUM API의 AJAX 사용 불가
!! 자바스크립트 이용이 안되더랍니다.
!!
상황은 AJAX가 콜백(callback)을 받을 수
없어 사용할 수 없었습니다.
ABCD 서버에서 json을 받아서 처리하는
방법을 사용했습니다.
덕분에 삽질을 좀 했고 가뜩이나 안좋은
우리 서버가 위기에 처했습니다.
약속을 지켜야 했기에 실행은 했습니다.
설마 잡혀가진 않겠죠.
DAUM 쇼핑 API
https://developers.daum.net/services/apis/shopping/search
쇼핑 API 구조
…..
실행 화면
이전 다음
프로그램 구조
!DOCTYPE html
html
head lang=ko
meta charset=UTF-8
title상품검색/title
script src=http://ajax.googleapis.com/ajax/libs/jquery/
1.11.2/jquery.min.js/script
style … /style
/head
body
script … /script
/body
/html
shop.html
CSS
#progress {top: 50%; left: 50%; text-align:center; display: none}
.search-bar {float:left; width:100%; margin-left:50px;}
.contents {float:left; width:100%;}
ul.item-list {float:left; width:100%; list-style:none;}
li.item-pic {float:left; width:150px; }
.page{float:left; margin-left:50px;}
head
style
여기에 위치
/style
/head

More Related Content

What's hot

Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modificationSecrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modificationHyuncheol Jeon
 
Web Components 101 polymer & brick
Web Components 101 polymer & brickWeb Components 101 polymer & brick
Web Components 101 polymer & brickyongwoo Jeon
 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Kyoung Up Jung
 
간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기Kyoung Up Jung
 
Vuejs 시작하기
Vuejs 시작하기Vuejs 시작하기
Vuejs 시작하기성일 한
 
회사에서 써보는 SQLAlchemy
회사에서 써보는 SQLAlchemy회사에서 써보는 SQLAlchemy
회사에서 써보는 SQLAlchemyJc Kim
 
테스트가 뭐예요?
테스트가 뭐예요?테스트가 뭐예요?
테스트가 뭐예요?Kyoung Up Jung
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Kyoung Up Jung
 
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기Kwangyoun Jung
 
Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기영우 박
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js연웅 조
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기Jeado Ko
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?Sang-ho Choi
 
5-4. html5 offline and storage
5-4. html5 offline and storage5-4. html5 offline and storage
5-4. html5 offline and storageJinKyoungHeo
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVCArawn Park
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs기동 이
 
Angular2 router&http
Angular2 router&httpAngular2 router&http
Angular2 router&httpDong Jun Kwon
 
5-5. html5 connectivity
5-5. html5 connectivity5-5. html5 connectivity
5-5. html5 connectivityJinKyoungHeo
 
Clean Front-End Development
Clean Front-End DevelopmentClean Front-End Development
Clean Front-End Development지수 윤
 
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기Jeado Ko
 

What's hot (20)

Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modificationSecrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
 
Web Components 101 polymer & brick
Web Components 101 polymer & brickWeb Components 101 polymer & brick
Web Components 101 polymer & brick
 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.
 
간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기
 
Vuejs 시작하기
Vuejs 시작하기Vuejs 시작하기
Vuejs 시작하기
 
회사에서 써보는 SQLAlchemy
회사에서 써보는 SQLAlchemy회사에서 써보는 SQLAlchemy
회사에서 써보는 SQLAlchemy
 
테스트가 뭐예요?
테스트가 뭐예요?테스트가 뭐예요?
테스트가 뭐예요?
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기
 
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기
 
Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
 
5-4. html5 offline and storage
5-4. html5 offline and storage5-4. html5 offline and storage
5-4. html5 offline and storage
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVC
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
 
Angular2 router&http
Angular2 router&httpAngular2 router&http
Angular2 router&http
 
5-5. html5 connectivity
5-5. html5 connectivity5-5. html5 connectivity
5-5. html5 connectivity
 
Clean Front-End Development
Clean Front-End DevelopmentClean Front-End Development
Clean Front-End Development
 
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
 

Viewers also liked

처음배우는 자바스크립트, 제이쿼리 #2
처음배우는 자바스크립트, 제이쿼리 #2처음배우는 자바스크립트, 제이쿼리 #2
처음배우는 자바스크립트, 제이쿼리 #2성일 한
 
CSS 선택자와 디버그
CSS 선택자와 디버그CSS 선택자와 디버그
CSS 선택자와 디버그성일 한
 
나의 jQuery 실력 향상기
나의 jQuery 실력 향상기나의 jQuery 실력 향상기
나의 jQuery 실력 향상기정석 양
 
6주 javaScript 시작하며
6주  javaScript 시작하며6주  javaScript 시작하며
6주 javaScript 시작하며지수 윤
 
Ionic으로 모바일앱 만들기 #4
Ionic으로 모바일앱 만들기 #4Ionic으로 모바일앱 만들기 #4
Ionic으로 모바일앱 만들기 #4성일 한
 
Ionic으로 모바일앱 만들기 #3
Ionic으로 모바일앱 만들기 #3Ionic으로 모바일앱 만들기 #3
Ionic으로 모바일앱 만들기 #3성일 한
 
Ionic으로 모바일앱 만들기 #5
Ionic으로 모바일앱 만들기 #5Ionic으로 모바일앱 만들기 #5
Ionic으로 모바일앱 만들기 #5성일 한
 
Ionic으로 모바일앱 만들기 #2
Ionic으로 모바일앱 만들기 #2Ionic으로 모바일앱 만들기 #2
Ionic으로 모바일앱 만들기 #2성일 한
 
Ionic으로 모바일앱 만들기 #1
Ionic으로 모바일앱 만들기 #1Ionic으로 모바일앱 만들기 #1
Ionic으로 모바일앱 만들기 #1성일 한
 
[하코사세미나] 한 시간 만에 배우는 Jquery
[하코사세미나] 한 시간 만에 배우는 Jquery[하코사세미나] 한 시간 만에 배우는 Jquery
[하코사세미나] 한 시간 만에 배우는 Jquery정석 양
 
Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기성일 한
 
Best practice of HTML5 Semantic Markup
Best practice of HTML5 Semantic MarkupBest practice of HTML5 Semantic Markup
Best practice of HTML5 Semantic MarkupToby Yun
 
2016 ABCD 소개
2016 ABCD 소개2016 ABCD 소개
2016 ABCD 소개성일 한
 

Viewers also liked (20)

처음배우는 자바스크립트, 제이쿼리 #2
처음배우는 자바스크립트, 제이쿼리 #2처음배우는 자바스크립트, 제이쿼리 #2
처음배우는 자바스크립트, 제이쿼리 #2
 
Basic css
Basic cssBasic css
Basic css
 
html+css
html+csshtml+css
html+css
 
4-2. ajax
4-2. ajax4-2. ajax
4-2. ajax
 
CSS 선택자와 디버그
CSS 선택자와 디버그CSS 선택자와 디버그
CSS 선택자와 디버그
 
jQuery 구조와 기능
jQuery 구조와 기능jQuery 구조와 기능
jQuery 구조와 기능
 
나의 jQuery 실력 향상기
나의 jQuery 실력 향상기나의 jQuery 실력 향상기
나의 jQuery 실력 향상기
 
Jquery핵심노토
Jquery핵심노토Jquery핵심노토
Jquery핵심노토
 
6주 javaScript 시작하며
6주  javaScript 시작하며6주  javaScript 시작하며
6주 javaScript 시작하며
 
Ionic으로 모바일앱 만들기 #4
Ionic으로 모바일앱 만들기 #4Ionic으로 모바일앱 만들기 #4
Ionic으로 모바일앱 만들기 #4
 
Basic html
Basic htmlBasic html
Basic html
 
Ionic으로 모바일앱 만들기 #3
Ionic으로 모바일앱 만들기 #3Ionic으로 모바일앱 만들기 #3
Ionic으로 모바일앱 만들기 #3
 
Ionic으로 모바일앱 만들기 #5
Ionic으로 모바일앱 만들기 #5Ionic으로 모바일앱 만들기 #5
Ionic으로 모바일앱 만들기 #5
 
Ionic으로 모바일앱 만들기 #2
Ionic으로 모바일앱 만들기 #2Ionic으로 모바일앱 만들기 #2
Ionic으로 모바일앱 만들기 #2
 
Ionic으로 모바일앱 만들기 #1
Ionic으로 모바일앱 만들기 #1Ionic으로 모바일앱 만들기 #1
Ionic으로 모바일앱 만들기 #1
 
[하코사세미나] 한 시간 만에 배우는 Jquery
[하코사세미나] 한 시간 만에 배우는 Jquery[하코사세미나] 한 시간 만에 배우는 Jquery
[하코사세미나] 한 시간 만에 배우는 Jquery
 
Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기
 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
 
Best practice of HTML5 Semantic Markup
Best practice of HTML5 Semantic MarkupBest practice of HTML5 Semantic Markup
Best practice of HTML5 Semantic Markup
 
2016 ABCD 소개
2016 ABCD 소개2016 ABCD 소개
2016 ABCD 소개
 

Similar to 처음배우는 자바스크립트, 제이쿼리 #4

[115] clean fe development_윤지수
[115] clean fe development_윤지수[115] clean fe development_윤지수
[115] clean fe development_윤지수NAVER D2
 
Node.js and react
Node.js and reactNode.js and react
Node.js and reactHyungKuIm
 
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]WSConf.
 
웹개발자가 알아야할 기술
웹개발자가 알아야할 기술웹개발자가 알아야할 기술
웹개발자가 알아야할 기술jaypi Ko
 
7가지 동시성 모델 람다아키텍처
7가지 동시성 모델  람다아키텍처7가지 동시성 모델  람다아키텍처
7가지 동시성 모델 람다아키텍처Sunggon Song
 
Android Google Cloud Message 설정
Android Google Cloud Message 설정Android Google Cloud Message 설정
Android Google Cloud Message 설정정호 이
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GDG Korea
 
Html5&css 3장
Html5&css 3장Html5&css 3장
Html5&css 3장홍준 김
 
Role Of Server In Ajax Korean
Role Of Server In Ajax KoreanRole Of Server In Ajax Korean
Role Of Server In Ajax KoreanTerry Cho
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Sungjoon Yoon
 
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive Elasticsearch
 
Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발Jay Park
 
알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web AnimationsChang W. Doh
 
Express framework tutorial
Express framework tutorialExpress framework tutorial
Express framework tutorial우림 류
 

Similar to 처음배우는 자바스크립트, 제이쿼리 #4 (20)

[115] clean fe development_윤지수
[115] clean fe development_윤지수[115] clean fe development_윤지수
[115] clean fe development_윤지수
 
Node.js and react
Node.js and reactNode.js and react
Node.js and react
 
Html5 performance
Html5 performanceHtml5 performance
Html5 performance
 
Mongo db 최범균
Mongo db 최범균Mongo db 최범균
Mongo db 최범균
 
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
 
웹개발자가 알아야할 기술
웹개발자가 알아야할 기술웹개발자가 알아야할 기술
웹개발자가 알아야할 기술
 
7가지 동시성 모델 람다아키텍처
7가지 동시성 모델  람다아키텍처7가지 동시성 모델  람다아키텍처
7가지 동시성 모델 람다아키텍처
 
Android Google Cloud Message 설정
Android Google Cloud Message 설정Android Google Cloud Message 설정
Android Google Cloud Message 설정
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
 
Html5&css 3장
Html5&css 3장Html5&css 3장
Html5&css 3장
 
Role Of Server In Ajax Korean
Role Of Server In Ajax KoreanRole Of Server In Ajax Korean
Role Of Server In Ajax Korean
 
Nodejs express
Nodejs expressNodejs express
Nodejs express
 
Hacosa jquery 1th
Hacosa jquery 1thHacosa jquery 1th
Hacosa jquery 1th
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)
 
One-day-codelab
One-day-codelabOne-day-codelab
One-day-codelab
 
Javascript
JavascriptJavascript
Javascript
 
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
 
Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발
 
알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations
 
Express framework tutorial
Express framework tutorialExpress framework tutorial
Express framework tutorial
 

More from 성일 한

파이어베이스 스터디
파이어베이스 스터디파이어베이스 스터디
파이어베이스 스터디성일 한
 
Electron 개발하기
Electron 개발하기Electron 개발하기
Electron 개발하기성일 한
 
Laravel 로 배우는 서버사이드 #5
Laravel 로 배우는 서버사이드 #5Laravel 로 배우는 서버사이드 #5
Laravel 로 배우는 서버사이드 #5성일 한
 
Laravel 로 배우는 서버사이드 #4
Laravel 로 배우는 서버사이드 #4Laravel 로 배우는 서버사이드 #4
Laravel 로 배우는 서버사이드 #4성일 한
 
Laravel 로 배우는 서버사이드 #1
Laravel 로 배우는 서버사이드 #1Laravel 로 배우는 서버사이드 #1
Laravel 로 배우는 서버사이드 #1성일 한
 
인플루언서 마케팅 (INFLUENCER MARKETING)
인플루언서 마케팅 (INFLUENCER MARKETING)인플루언서 마케팅 (INFLUENCER MARKETING)
인플루언서 마케팅 (INFLUENCER MARKETING)성일 한
 
워드프레스 기초 (ABCD) #2
워드프레스 기초 (ABCD) #2워드프레스 기초 (ABCD) #2
워드프레스 기초 (ABCD) #2성일 한
 
워드프레스 기초 (ABCD) #1
워드프레스 기초 (ABCD) #1워드프레스 기초 (ABCD) #1
워드프레스 기초 (ABCD) #1성일 한
 
파이썬 플라스크로 배우는 웹프로그래밍 #4 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #4 (ABCD)파이썬 플라스크로 배우는 웹프로그래밍 #4 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #4 (ABCD)성일 한
 
파이썬 플라스크로 배우는 웹프로그래밍 #3 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #3 (ABCD)파이썬 플라스크로 배우는 웹프로그래밍 #3 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #3 (ABCD)성일 한
 
파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)성일 한
 
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)성일 한
 

More from 성일 한 (12)

파이어베이스 스터디
파이어베이스 스터디파이어베이스 스터디
파이어베이스 스터디
 
Electron 개발하기
Electron 개발하기Electron 개발하기
Electron 개발하기
 
Laravel 로 배우는 서버사이드 #5
Laravel 로 배우는 서버사이드 #5Laravel 로 배우는 서버사이드 #5
Laravel 로 배우는 서버사이드 #5
 
Laravel 로 배우는 서버사이드 #4
Laravel 로 배우는 서버사이드 #4Laravel 로 배우는 서버사이드 #4
Laravel 로 배우는 서버사이드 #4
 
Laravel 로 배우는 서버사이드 #1
Laravel 로 배우는 서버사이드 #1Laravel 로 배우는 서버사이드 #1
Laravel 로 배우는 서버사이드 #1
 
인플루언서 마케팅 (INFLUENCER MARKETING)
인플루언서 마케팅 (INFLUENCER MARKETING)인플루언서 마케팅 (INFLUENCER MARKETING)
인플루언서 마케팅 (INFLUENCER MARKETING)
 
워드프레스 기초 (ABCD) #2
워드프레스 기초 (ABCD) #2워드프레스 기초 (ABCD) #2
워드프레스 기초 (ABCD) #2
 
워드프레스 기초 (ABCD) #1
워드프레스 기초 (ABCD) #1워드프레스 기초 (ABCD) #1
워드프레스 기초 (ABCD) #1
 
파이썬 플라스크로 배우는 웹프로그래밍 #4 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #4 (ABCD)파이썬 플라스크로 배우는 웹프로그래밍 #4 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #4 (ABCD)
 
파이썬 플라스크로 배우는 웹프로그래밍 #3 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #3 (ABCD)파이썬 플라스크로 배우는 웹프로그래밍 #3 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #3 (ABCD)
 
파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)
 
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
 

처음배우는 자바스크립트, 제이쿼리 #4

  • 11. GOAL • AJAX 설명 • AJAX 를 이용한 쇼핑몰 검색 • AJAX 를 이용한 로또 프로그램
  • 13. REST CLIENT • Rest Client 툴은 API 값을 전달하고 볼 때 편리하도록 되어있습니다.
  • 14. REST CLIENT 1 2 3 http://abcds.kr/study/daum.php?q=가방 Advanced Rest Client 를 설치합니다. 앱을 설치합니다. 크롬 앱스토어를 실행합니다. 브라우져에 다음과 같이 입력합니다.
  • 15. REST CLIENT 4 결과를 확인합니다.
  • 16. 동기와 비동기 일반적으로 순차적으로 실행됩니다. 앞에게 끝나면 다음것으로 다음것으로.. 동기(synchronous) 방식 이라고 합니다. 안정성 측면에서 좋지만 로딩이 완료되면 다시 통신을 하려면 전체를 다시 로드해야하며 전체 로딩을 기다려야 하기에 실행 속도가 느려집니다. abcd.c 모듈 1 모듈 2 모듈 3
  • 17. 동기와 비동기 모듈 1 비동기(asynchronous) 모듈 단위로 서버에 개별적 요청 합니다. 요청 결과를 callback 함수가 받아 처리합니다. AJAX 는 일반적으로 비동기통신을 합니다.. 화면전환이 없이 실행되는 경우 AJAX 일 가능성이 높습니다. 개별 서버 통신이기에 작업이 끝나는 시간을 정확하게 알 수 없습니다. 모듈 2 모듈 3 ….. abcd.js Callback 1 서버 통신 Callback 2
  • 20. $.ajax({ url: http://www.abcds.kr/study/s3.php, type: “GET, dataType : “json”, data : { id : “사용자 아이디”, pass : “사용자 비밀번호” }, success : function(data) { var obj = $.parseJSON(data); obj.id; obj.pass; } error : function (request, status, error) { alert(request.responseText); } }); $.AJAX jsonp 라는 형태도 있지만 여기서는 설명하지 않겠습니다. * jQuery.ajax() 설명 파라미터 설명 url : 호출 URL dataType : json, xml, jsonp type : 서버 요청 방법 (GET, POST) success : 성공했을때 data 형태의 return 값을 받음 error : 실패 핸들링 전달 데이터 {'id':'jamie', 'pass': '1234'}
  • 24. 프로그램 구조 !DOCTYPE html html head lang=ko meta charset=UTF-8 title추첨 프로그램/title script src=http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js/script style … /style /head body form … /form script … /script /body lottery.html
  • 25. CSS STYLE body { text-align: center; padding-top: 50px; } .add_button { width: 130px; background-color: azure; padding: 2px; margin: 2px; } .go_button { width: 130px; background-color: azure; padding: 10px; margin: 10px; } .name_input { width: 130px; margin: 2px; } .message { margin: 10px; } head style 여기에 위치 /style /head
  • 26. FORM form id=lotto_form h1추첨 시간/h1 div id=main div div id=name_div!-- 이름입력 --/div input class=add_button type=button id=add value=“추가”/ /div div input class=go_button type=button id=go value=GO! / /div /div div class=message id=message!-- 결과출력 --/div div id=loading style=display:none img src=lotto.gif / /div div id=fire style=display:none img src=fire.gif / /div /form body 와 /body 사이에 위치, 사용자 입력 폼
  • 27. 자바스크립트 script $(document).ready(function(){ $(#add).click(function(){ $(#name_div).append(divinput class='name_input' type='text' name=‘array[]' //div); }); $(#go).click(function() { if ($('#first').val() != ) { $('#loading').show(); $('#main').hide(); } $.ajax({ url : http://abcds.kr/study/lottery.php, type : GET, data : $(#lotto_form).serialize(), success: function(data) { var returned_data = JSON.parse(data); // 5초후 출력 의도적인 딜레이 setTimeout(function(){complete(returned_data.message);},5000); } }); function complete(message) { $('#loading').hide(); $('#message').html(message); $('#fire').show(); } }); }); /script
  • 28. 설명 $(“#name_div”).append(“div.../div); data : $(#lotto_form).serialize(), setTimeout(function(){complete(returnedData.message);},5000); function complete(message) { $('#loading').hide(); $('#message').html(message); $('#fire').show(); } name_div엘리먼트에는 html 을 넣습니다. 동적으로 엘리먼트를 추가할 수 있습니다. 데이터로 폼 전체를 넘깁니다. 폼값을 일일이 넘기지 않아도 되니 간편합니다. 5000 (5초) 동안 멈추고 comlete 함수를 호출합니다. 이때 returned_data.message 값도 함께 넘겨줍니다.
  • 29. 4. 다음 API 를 이용한 쇼핑 검색 프로그램 개발
  • 30. DAUM API의 AJAX 사용 불가 !! 자바스크립트 이용이 안되더랍니다. !! 상황은 AJAX가 콜백(callback)을 받을 수 없어 사용할 수 없었습니다. ABCD 서버에서 json을 받아서 처리하는 방법을 사용했습니다. 덕분에 삽질을 좀 했고 가뜩이나 안좋은 우리 서버가 위기에 처했습니다. 약속을 지켜야 했기에 실행은 했습니다. 설마 잡혀가진 않겠죠.
  • 34. 프로그램 구조 !DOCTYPE html html head lang=ko meta charset=UTF-8 title상품검색/title script src=http://ajax.googleapis.com/ajax/libs/jquery/ 1.11.2/jquery.min.js/script style … /style /head body script … /script /body /html shop.html
  • 35. CSS #progress {top: 50%; left: 50%; text-align:center; display: none} .search-bar {float:left; width:100%; margin-left:50px;} .contents {float:left; width:100%;} ul.item-list {float:left; width:100%; list-style:none;} li.item-pic {float:left; width:150px; } .page{float:left; margin-left:50px;} head style 여기에 위치 /style /head
  • 36. HTML div id=progress !-- 로딩 인디케이터 -- img style=width:15px src=loader.gif / 로딩 중입니다. /div div class=search-bar input type=text id=q/ !-- 검색 창 -- select id=sort option value=pop인기도순/option option value=min_price최저가순/option option value=max_price최고가순/option option value=date출시일/option option value=review리뷰갯수순/option /select input type=button id=search value=검색/ /div div class=contents !-- 리스트 -- div id=item_list !-- loop -- /div /div div class=page style=margin: 50px span id=prev이전/span span id=next다음/span /div body 와 /body 사이에 입력
  • 37. 자바스크립트 $(document).ready(function(){ var pageno=1; var html_data = ; $(#search).click(function(){ load(); }); function load(){ $('#progress').show(); $.ajax({ url : http://abcds.kr/study/daum.php, type : GET, data : { q : $('#q').val().replace(/s/gi, ''), result : 10, pageno : pageno, sort : $('#sort').val() }, // 다음 페이지의 success 부분 여기 위치 }); } }); body script 여기에 위치 /script /body
  • 38. SUCCESS 부분 success: function(d) { var returnedData = JSON.parse(d); var data = returnedData.channel.item; if ( data != null ) { $(#item_list).empty(); $.each(data, function(index, item) { html_data += ul class=‘item-list'; html_data += li class='item-pic'; html_data += a target='_blank' href=' + item.link + '; html_data += img src=' + item.image_url +' /; html_data += /a; html_data += /li; html_data += li class='item-text'; html_data += spanb + item.title +/b/span br/; html_data += span + item.category_name + /span br/; html_data += span발매일 /spanspan + item.publish_date + /spanbr/; html_data += span가격 /spanspan + item.price_min + /spanbr/; html_data += span리뷰 /spanspan + item.review_count + /spanbr/; html_data += li; html_data += /ul; }); $(#item_list).html(html_data); html_data = ; $('#progress').hide(); } }
  • 39. 설명 1 JSON.parse(d) if ( data != null ) { $(#item_list).html(html_data); 리턴된 데이터(d)가 비어있지 않다면 실행합니다. 리턴된 데이터(d)가 자바스크립트가 실행할 수 있도록 변형합니다. item_list 엘리먼트에 html_data 의 값을 넣습니다. 여기선 리스트 하나하나 겠죠. $(#item_list).empty(); item_list 엘리먼트의 내용을 지웁니다.
  • 40. 설명 2 * 공백제거 $.each(data, function(index, item) { item.image_url; }); html_data += ul class='item-list'; $('#q').val().replace(/s/gi, ''), html_data = html_data + “문자열” 이라는 의미입니다. q엘리먼트의 값의 빈공간을 제거 합니다. /s/gi 는 정규식이라고 합니다. replace 는 변환입니다. 안하면 에러발생.. for 와 비슷한 반복문인데 json array 를 처음 끝까지 확인할때 씁니다. $.each(data, function(index, item){ }); data = json 데이터 index = 하나씩 증가 item 은 하나의 로우(row)입니다.
  • 41. 해봅시다. $('#prev').click(function(){ // 이전 여기를 채워 보세요 }); $(‘#next').click(function(){ // 다음 여기를 채워 보세요 }); 이전, 다음 기능을 만들어 봅시다. 힌트 pageno 변수를 증가시키고 다시 로드 합니다.
  • 42. $(document).ready(function(){ var pageno=1; var html_data = ; $(#search).click(function(){ load(); }); function load(){ $('#progress').show(); $.ajax({ url : http://abcds.kr/study/daum.php, type : GET, data : { q : $('#q').val().replace(/s/gi, ''), result : 10, pageno : pageno, sort : $('#sort').val() }, success: function(d) { var returnedData = JSON.parse(d); var data = returnedData.channel.item; if ( data != null ) { $(#item_list).empty(); $.each(data, function(index, item) { html_data += ul class='item-list'; html_data += li class='item-pic'; html_data += a target='_blank' href=' + item.link + '; html_data += img src=' + item.image_url +' /; html_data += /a; html_data += /li; html_data += li class='item-text'; html_data += spanb + item.title +/b/span br/; html_data += span + item.category_name + /span br/; html_data += span발매일 /spanspan + item.publish_date + /span br/; html_data += span가격 /spanspan + item.price_min + /span br/; html_data += span리뷰 /spanspan + item.review_count + /span br/; html_data += li; html_data += /ul; }); $(#item_list).html(html_data); html_data = ; $('#progress').hide(); } } }); } }); 자바스크립트 분리 !DOCTYPE html html head lang=ko meta charset=UTF-8 /head body script src=shop.js/script /body /html shop.js
  • 43. QA
  • 44. 정말 많이 수고하셨습니다. :) ABCD http://abcds.kr https://www.facebook.com/groups/562787713823026/ 한성일 https://www.facebook.com/jamie.han.16 iheart79@gmail.com