AJAX

μ›Ή λΈŒλΌμš°μ €μ—μ„œ μ›ΉνŽ˜μ΄μ§€λ₯Ό μš”μ²­ν•˜κ±°λ‚˜ 링크 ν΄λ¦­μ‹œ ν™”λ©΄ μ „ν™˜μ΄ λ°œμƒν•œλ‹€.

μ„œλ²„μ™€ λΈŒλΌμš°μ €μ™€μ˜ 톡신에 μ˜ν•œ 것인데, μ„œλ²„λŠ” μš”μ²­λ°›μ€ νŽ˜μ΄μ§€(HTML)λ₯Ό λ°˜ν™˜ν•œλ‹€. μ΄λ•Œ HTMLμ—μ„œ λ‘œλ“œν•˜λŠ” CSS, JavaScript νŒŒμΌλ“€λ„ 같이 λ°˜ν™˜λœλ‹€. ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— λ”°λΌμ„œ μ„œλ²„λŠ” 정적인 파일, μ„œλ²„ μ‚¬μ΄λ“œ ν”„λ‘œκ·Έλž¨μ΄ λ§Œλ“œλŠ” 파일, 데이터λ₯Ό λ°˜ν™˜ν•  μˆ˜λ„ μžˆλ‹€. μ„œλ²„λ‘œ λΆ€ν„° μ›ΉνŽ˜μ΄μ§€κ°€ λ°˜ν™˜λ˜λ©΄ ν΄λΌμ΄μ–ΈνŠΈ(λΈŒλΌμš°μ €)λŠ” 이λ₯Ό λ Œλ”λ§ν•˜μ—¬ 화면에 ν‘œμ‹œν•œλ‹€.

Ajax

AjaxλŠ” Asynchronous JavaScript and XML의 μ•½μžλ‘œ JavaScriptλ₯Ό μ΄μš©ν•˜μ—¬ 비동기적(Asynchronous)으둜 μ„œλ²„μ™€ λΈŒλΌμš°μ €κ°„μ˜ 데이터λ₯Ό κ΅ν™˜ν•  수 μžˆλŠ” 톡신방식이닀.

즉, μ„œλ²„λ‘œλΆ€ν„° μ›ΉνŽ˜μ΄μ§€κ°€ λ°˜ν™˜λ˜λ©΄ ν•˜λ©΄ 전체λ₯Ό κ°±μ‹ ν•˜μ§€ μ•Šκ³ , μΌλΆ€λ§Œμ„ κ°±μ‹ ν•˜λŠ” 방법이닀.

Ajax의 λ™μž‘μ›λ¦¬λŠ” Browserμ—μ„œ μ„œλ²„λ‘œ 보낼 Dataλ₯Ό Ajax Engine을 ν†΅ν•΄μ„œ μ„œλ²„λ‘œ μ „μ†‘ν•œλ‹€. μ΄λ•Œ Ajax Engine은 JavaScriptλ₯Ό 톡해 DOM을 μ‚¬μš©ν•˜μ—¬ XMLHttpRequest(XHR) 객체둜 데이터λ₯Ό μ „λ‹¬ν•œλ‹€. 이 XHR을 μ΄μš©ν•΄ μ„œλ²„μ—μ„œ 비동기 λ°©μ‹μœΌλ‘œ 데이터λ₯Ό μ‘°νšŒν•΄ 올 수 μžˆλŠ” 것이닀.

μ„œλ²„λŠ” HTML, XML, JSON 등을 λ°˜ν™˜ν•˜λŠ”λ° Ajaxλ₯Ό μœ„ν•œ 데이터 ν˜•μ‹μ€ JSON을 μ‚¬μš©ν•˜λŠ” 것이 μΌλ°˜μ μ΄λ‹€.

XMLHttpRequest 객체

XMLHttpRequest κ°μ²΄λŠ” μ›Ή λΈŒλΌμš°μ €κ°€ μ„œλ²„μ™€ 데이터λ₯Ό κ΅ν™˜ν•  λ•Œ μ‚¬μš©ν•œλ‹€. μ›Ή λΈŒλΌμš°μ €κ°€ λ°±κ·ΈλΌμš΄λ“œμ—μ„œ μ„œλ²„μ™€ κ³„μ†ν•΄μ„œ 톡신할 수 μžˆλŠ” 것은 XMLHttpRequest 객체λ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

  • open() : μ„œλ²„λ‘œ 보낼 Ajax μš”μ²­μ˜ ν˜•μ‹ μ„€μ •

    • 전달방식 : μš”μ²­μ„ 전달할 방식 (GET, POST)

    • URLμ£Όμ†Œ : μš”μ²­μ„ μ²˜λ¦¬ν•  μ„œλ²„μ˜ 파일 μ£Όμ†Œ 전달

    • 동기여뢀 : μš”μ²­μ„ λ™κΈ°μ‹μœΌλ‘œ 전달할지 λΉ„λ™κΈ°μ‹μœΌλ‘œ 전달할지 μ—¬λΆ€

      • 비동기 true

      • 동기 false

  • send() : μž‘μ„±λœ Ajaxμš”μ²­μ„ μ„œλ²„λ‘œ 전달

Ajaxμ—μ„œλŠ” 주둜 POST 방식을 μ‚¬μš©ν•˜μ—¬ μš”μ²­μ„ μ „λ‹¬ν•œλ‹€.

XMLHttpRequest.send() λ©”μ†Œλ“œλ₯Ό 톡해 μ„œλ²„μ— Requestλ₯Ό μ „μ†‘ν•˜λ©΄ μ„œλ²„λŠ” Responseλ₯Ό λ°˜ν™˜ν•΄ μ£ΌλŠ”λ° μ–Έμ œ Responseκ°€ ν΄λΌμ΄μ–ΈνŠΈμ— 도달할 μ§€λŠ” μ•Œ 수 μ—†λ‹€.

μ΄λ•Œ XMLHttpRequest.onreadystatechange λŠ” Responseκ°€ ν΄λΌμ΄μ–ΈνŠΈμ— λ„λ‹¬ν•˜μ—¬ λ°œμƒλœ 이벀트λ₯Ό κ°μ§€ν•˜κ³  μ½œλ°±ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜μ—¬ μ€€λ‹€. 즉, req.onreadystatechangeλŠ” readyState propertyκ°€ 변경될 λ•Œλ§ˆλ‹€ ν˜ΈμΆœλ˜λŠ” EventHandler이닀.

  • readyState : Request에 λ³€ν™”κ°€ λ°œμƒν•œ κ²½μš°μ— readyState의 propertyκ°€ λ³€κ²½λœλ‹€. responseκ°€ ν΄λ¦¬μ΄μ–ΈνŠΈμ— λ„λ‹¬ν–ˆλŠ”μ§€λ₯Ό 좔적할 수 μžˆλŠ” 값이닀.

Value

State

Description

0

UNSENT

XMLHttpRequest.open() λ©”μ†Œλ“œ 호좜 이전 XMLHttpRequest 객체가 생성

1

OPENED

XMLHttpRequest.open() λ©”μ†Œλ“œ 호좜 μ™„λ£Œ open() λ©”μ†Œλ“œκ°€ μ„±κ³΅μ μœΌλ‘œ μ‹€ν–‰

2

HEADERS_RECEIVED

XMLHttpRequest.send() λ©”μ†Œλ“œ 호좜 μ™„λ£Œ λͺ¨λ“  μš”μ²­μ— λŒ€ν•œ 응닡이 도착

3

LOADING

μ„œλ²„ 응닡 쀑(XMLHttpRequest.responseText λ―Έμ™„μ„± μƒνƒœ) μš”μ²­ν•œ 데이터λ₯Ό 처리 쀑인 경우

4

DONE

μ„œλ²„ 응닡 μ™„λ£Œ

  • abort : ajaxμš”μ²­μ„ μ·¨μ†Œν•˜κ±°λ‚˜ μ€‘λ‹¨ν•΄μ•Όν•˜λŠ” κ²½μš°μ— μ‚¬μš©ν•œλ‹€.

JSON

JSON(JavaScript Object Notation)은 JavaScript의 객체 λ¦¬ν„°λŸ΄κ³Ό 맀우 ν‘μ‚¬ν•˜λ‹€. ν•˜μ§€λ§Œ JSON은 μˆœμˆ˜ν•œ ν…μŠ€νŠΈλ‘œ κ΅¬μ„±λœ 데이터이닀.

λ¦¬ν„°λŸ΄ : μ½”λ“œμƒμ—μ„œ 데이터λ₯Ό ν‘œν˜„ν•˜λŠ” 방식

ν‚€λŠ” λ°˜λ“œμ‹œ ν°λ”°μ˜΄ν‘œ("")둜 λ‘˜λŸ¬μ‹Έμ•Όν•œλ‹€. (μž‘μ€ λ”°μ˜΄ν‘œ(') λΆˆκ°€)

JSON.stringify()

JSON.stringify() λ©”μ†Œλ“œλŠ” 객체λ₯Ό JSON ν˜•μ‹μ˜ λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•œλ‹€.

JSON.parse()

JSON.parse() λŠ” JSON 데이터λ₯Ό κ°€μ§„ λ¬Έμžμ—΄μ„ 객체둜 λ³€ν™˜ν•œλ‹€.

μ„œλ²„λ‘œλΆ€ν„° λΈŒλΌμš°μ €λ‘œ μ „μ†‘λœ JSON λ°μ΄ν„°λŠ” λ¬Έμžμ—΄μ΄λ‹€. 이 λ¬Έμžμ—΄μ„ κ°μ²΄ν™”ν•΄μ•Όν•˜λŠ”λ° 이것을 Deserializing(역직렬화) 라 ν•œλ‹€. JSON.parse() λ₯Ό μ‚¬μš©ν•΄ λ¬Έμžμ—΄μ„ 객체둜 λ³€ν™˜ν•  수 μžˆλ‹€.

JSONP

μš”μ²­μ— μ˜ν•΄ μ›ΉνŽ˜μ΄μ§€κ°€ μ „λ‹¬λœ μ„œλ²„μ™€ λ™μΌν•œ λ„λ©”μΈμ˜ μ„œλ²„λ‘œ μ „λ‹¬λœ λ°μ΄ν„°λŠ” λ¬Έμ œμ—†μ΄ μ²˜λ¦¬ν•  수 μžˆλ‹€. ν•˜μ§€λ§Œ λ³΄μ•ˆμƒμ˜ 이유둜 λ‹€λ₯Έ 도메인(http, https ν¬νŠΈκ°€ λ‹€λ₯Έ 경우 포함)μœΌλ‘œλΆ€ν„° μš”μ²­(CROSS DOMAIN)은 μ œν•œλœλ‹€. 이것을 Same-origin policy λ™μΌμΆœμ²˜μ›μΉ™ μ΄λΌν•œλ‹€.

λ™μΌμΆœμ²˜μ›μΉ™ μš°νšŒν•˜λŠ” 방법

  1. Proxy

  2. JSONP : script νƒœκ·Έμ˜ 원본 μ£Όμ†Œμ— λŒ€ν•œ μ œμ•½μ΄ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”κ²ƒμ„ μ΄μš©ν•˜μ—¬ λ‹€λ₯Έ λ„λ©”μΈμ˜ μ„œλ²„μ—μ„œ 데이터λ₯Ό μˆ˜μ§‘ν•˜λŠ” 방법이닀. μžμ‹ μ˜ μ„œλ²„μ— ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜κ³  λ‹€λ₯Έ λ„λ©”μΈμ˜ μ„œλ²„μ— μ–»κ³ μž ν•˜λŠ” 데이터λ₯Ό 인수둜 ν•˜λŠ” ν•¨μˆ˜ ν˜ΈμΆœλ¬Έμ„ λ‘œλ“œν•˜λŠ” 방법이닀.

  1. Cross-Origin Resource Sharing : HTTP 헀더에 μΆ”κ°€μ μœΌλ‘œ 정보λ₯Ό μΆ”κ°€ν•˜μ—¬ λΈŒλΌμš°μ €μ™€ μ„œλ²„κ°„ μ„œλ‘œ ν†΅μ‹ ν•΄μ•Όν•œλ‹€λŠ” 사싀을 μΈμ§€ν•˜λ„λ‘ ν•˜λŠ” 방법이닀.

jQuery Ajax

jQueryλŠ” Ajax μš”μ²­κ³Ό 응닡을 μœ„ν•΄ μœ μš©ν•œ λ©”μ†Œλ“œλ“€μ„ μ œκ³΅ν•΄μ€€λ‹€.

Low-Level Interface

μ—¬κΈ°μ„œ [] λŠ” λ°˜λ³΅ν•΄μ„œ μ‚¬μš©ν•  수 μžˆλ‹€λŠ” μ˜λ―Έμ΄λ‹€.

settingsλŠ” Ajax μš”μ²­ μ„€μ • μ •λ³΄λ‘œ key,value의 쌍으둜 이루어진 객체이닀.

settings

Description

λΉ„κ³ 

url

μš”μ²­μ΄ 전솑될 url

method

http μš”μ²­ 방식 (GET/POST)

version added: 1.9.0

type

method의 alias (GET/POST)

1.9.0 이전 λ²„μ „μ—μ„œ μ‚¬μš©

data

μ„œλ²„λ‘œ 전달될 데이터

dataType

μ„œλ²„λ‘œλΆ€ν„° λ°˜ν™˜λ  λ°μ΄ν„°μ˜ type default: Intelligent Guess (xml, json, jsonp, script, html, text)

async

μš”μ²­ μ‹œ 동기화 μ—¬λΆ€(TRUE/FALSE) 기본은 비동기(asynchronous) μš”μ²­

timeout

μš”μ²­ μ œν•œ μ‹œκ°„. μ œν•œ μ‹œκ°„ μ•ˆμ— μš”μ²­μ΄ μ™„λ£Œλ˜μ§€ μ•ŠμœΌλ©΄ μš”μ²­μ„ μ·¨μ†Œν•˜κ±°λ‚˜ error μ½œλ°±μ„ 호좜.

jsonpCallback

JSONP μš”μ²­μ„ μœ„ν•œ 콜백 ν•¨μˆ˜ 이름

success

μš”μ²­ 성곡 이벀트 ν•Έλ“€λŸ¬

error

μš”μ²­ μ‹€νŒ¨ 이벀트 ν•Έλ“€λŸ¬

complete

μš”μ²­ μ™„λ£Œ 이벀트 ν•Έλ“€λŸ¬

cache

λΈŒλΌμš°μ €μ— μ˜ν•΄ μš”μ²­λ˜λŠ” νŽ˜μ΄μ§€λ₯Ό μΊμ‹œν•  수 μžˆλ‹€.(TRUE/FALSE)

beforeSend

http μš”μ²­ 전에 λ°œμƒν•˜λŠ” 이벀트 ν•Έλ“€λŸ¬

global

μ „μ—­ν•¨μˆ˜ ν™œμ„±ν™” μ—¬λΆ€ μ„€μ •

jqXHR은 jQuery HTTP Request둜, λΈŒλΌμš°μ € XMLHttpRequest Object의 집합이닀. data와 거의 λΉ„μŠ·ν•œ 값을 μ§€λ‹ˆκ³  μžˆλŠ”λ° μΆ”κ°€μ μœΌλ‘œ 톡신 status 와 readyStatus 등을 보내쀀닀.

Shorthand Method

jQuery.get()

HTTP GET requestλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλ²„λ‘œλΆ€ν„° 데이터λ₯Ό λ‘œλ“œν•œλ‹€.

jQuery.getJSON()

HTTP GET requestλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλ²„λ‘œλΆ€ν„° JSON-encoded 데이터λ₯Ό λ‘œλ“œν•œλ‹€.

jQuery.getScript()

HTTP GET requestλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλ²„λ‘œλΆ€ν„° JavaScript νŒŒμΌμ„ λ‘œλ“œν•œ ν›„ μ‹€ν–‰ν•œλ‹€.

jQuery.post()

HTTP GET requestλ₯Ό μ‚¬μš©ν•΄ μ„œλ²„λ‘œλΆ€ν„° 데이터λ₯Ό λ‘œλ“œν•œλ‹€.

.load()

μ„œλ²„λ‘œλΆ€ν„° HTML 데이터λ₯Ό λ‘œλ“œν•˜κ³  λ§€μΉ˜ν•œλ‹€.

μ°Έμ‘°νŽ˜μ΄μ§€

Last updated