XMLHttpRequest
μλ²μμ λΉλκΈ° λ°μ΄ν° ν΅μ μ νκΈ° μν΄μ XMLHttpRequest
κ°μ²΄λ₯Ό ν μ μλ€.
κΈ°μ‘΄μ μλ°μ€ν¬λ¦½νΈμ ajax
μ μ¬μ©νλ κ²κ³Ό λμΌνλ€.
1. HTTP Request μμ±
λͺ¨λ λΈλΌμ°μ μμ μ¬μ© κ°λ₯ν μΈμ€ν΄μ€λ₯Ό μμ±νλ€.
var xhr
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else if (window.ActiveXObject) {
xhr = new ActiveXObject('Microsoft.XMLHTTP');
}
callback
ν¨μλ₯Ό μ μ
2. μλ΅ λ°μ΄ν°λ₯Ό μ²λ¦¬ν var successCallback = function () {
// μλ²μμ λ°μ μλ΅μ νλ‘μΈμ±
}
xhr.onreadystatechange = successCallback;
3. μμ² (Request) μ μλ΅ (Response) μ μ μ
xhr.open('GET', '/json', true);
xhr.send(null);
open
Parameter- method
- GET, POST, HEAD
- λλ¬Έμ λ‘ νκΈ°νλ κ²μ κΆνλ€ (μΌλΆ λΈλΌμ°μ μμλ λΉ λμν μ μμ)
- url
- μμ²ν μλ²μ κ²½λ‘λ₯Ό μ λ ₯νλ€.
- async
- μν λ°©μμ κ²°μ νλ€ (λκΈ° / λΉ λκΈ°)
- method
send
Parameter- POST λ°©μμΌλ‘ μꡬ ν κ²½μ° μλ²λ‘ λ³΄λΌ λ°μ΄ν°λ₯Ό μ μνλ€
json
,soap
νΉμ 쿼리 μ€νΈλ§μΌλ‘ νν κ°λ₯
POST λ‘ ν΅μ ν κ²½μ° μμ² (request) MINE typeμ μ€μ ν΄μΌ ν©λλ€.
μλ₯Ό λ€λ©΄send
λ₯Ό νΈμΆνκΈ° μ μ μλμ κ°μ ννλ‘send
λ‘ λ³΄λΌ μΏΌλ¦¬λ₯Ό μ΄μ©ν΄μΌ νλ€.
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
4. μλ΅ λ°μ΄ν° μ²λ¦¬
λ°μ΄ν° μμ² (request) νμμλμ μλ΅ (response) μ²λ¦¬λ₯Ό ν΄μΌ νλ€.
μλ΅μ μ¬μ©λλ callback
ν¨μμμ XMLHttpRequest
κ°μ²΄λ readyState
λ€μκ³Ό κ°μ μλ΅ μꡬ μνκ°μ κ°μ§λ€.
readyState
κ° κ°μ§ μ μλ μλ΅ μν κ°
- 0 (uninitialized)
- κ°μ²΄κ° λ§ μμ±λμλ€.
open
λ©μλκ° μν λμ§ μμλ€.
- 1 (loading)
send
λ©μλκ° μν λμ§ μμλ€.
- 2 (loaded)
send
λ©μλκ° μν λμμ§λ§ μμ² ν€λλ₯Ό μ¬μ©ν μ μλ€.
- 3 (interactive)
- μΌλΆ λ°μ΄ν°λ§ μμ ν μνμ΄λ©°, μν λ° μλ΅ ν€λλ μ¬μ©κ°λ₯
- μμ² μνμ€
- 4 (complete)
- μμ²ν λ°μ΄ν°λ₯Ό μ λΆ λ°μ μνμ΄λ€.
- μμ² λ° μλ΅μ΄ μλ£λ¨
λμΌνκ² XMLHttpRequest
κ°μ²΄λ state
λ€μκ³Ό κ°μ μνκ°μ κ°μ§λ€.
- 200
- μ μ
- 403
- κΆν λΆμ‘± νΉμ μ κ·Ό κΈμ§
- 404
- νμ΄μ§λ₯Ό μ°Ύμ μ μμ
var successCallback = function () {
if (xhr.readState === 4 && xhr.status === 200) {
console.log('Success');
} else {
console.log('Failed');
}
}
5. μ΅μ’ μλ£ μ½λ
var xhr = new XMLHttpRequest();
xhr.open('GET', '/json', true);
xhr.onreadystatechange = function (obj) {
if (xhr.readyState === 4 && xhr.status === 200) {
/* μ±κ³΅ μ½λ */
var responseObj = JSON.stringify(xhr.responseText);
} else {
/* μ€ν¨ μ½λ */
}
};
xhr.send(null);
νλ‘κ·Έλμ€ λͺ¨λν°λ§
XMLHttpRequest
κ° μ§μνλ nsIJSXMLHttpRequest
μΈν°νμ΄μ€λ μμ²μ΄ μ²λ¦¬λλ λμ λ°μλλ μ΄λ²€νΈκ° μμ κ°λ₯νλ©° μ£ΌκΈ°μ μΈ μ§νμν μλ¦Ό λ° μλ¬ μλ¦Ό λ±μ νμΈ κ°λ₯ νλ€
var onProgress = function (e) {
var percent = (e.position / e.totalSize) * 100;
...
}
var onError = function (e) {
console.log('Error ', e.target.status, ' occurred while receving the document');
}
...
var xhr = new XMLHttpRequest();
xhr.open('GET', '/json', true);
xhr.onprogress = onProgress;
xhr.onload = onLoad;
xhr.onerror = onError;
xhr.send(null);
onprogress
μ μμ±μΈ position
κ³Ό totalSize
λ λ°μ λ°μ΄ν°κ° λͺ λ°μ΄νΈμΈμ§, μ 체 λ°μ΄ν° ν¬κΈ°κ° λͺ λ°μ΄νΈμΈμ§ κ°κ° λνλ
λλ€.
λͺ¨λ μ΄λ²€νΈλ κ·Έμ λμνλ XMLHttpRequest
λ₯Ό target
μμ±μΌλ‘ κ°μ§κ³ μμ΅λλ€.
CORS κ΄λ ¨ μ€μ μ΄μ
ν¬λ‘μ€ λλ©μΈκ°μ μΏ ν€ μ€μ μ λμ§ μκΈ° λλ¬Έμ μ μ± νΉμ λ°μ΄ν° λͺ μΈμ λ³κ²½μ ν΅ν΄ ν΄κ²°νλ€.
Request Header νΉμ Body μ νμν λ°μ΄ν°λ₯Ό μΆκ°νμ¬ λ³΄λ΄μ€λ€.
$.ajax({
...
beforeSend: function (xhr) {
xhr.setRequestHeader('param', $.cookie('value'));
},
...
})
jQuery Ajax μ¬μ©μμλ λ€μκ³Ό κ°μ΄ μ¬μ©
$.ajax({
...
xhrFields: { withCredentials: true },
...
})
jQuery 1.5.1 μμ μΆκ°λ κΈ°λ₯ μΌλ‘ ν΄λΉ νμ λ²μ μ μ§μ λΆκ°
β Window Intersection Observer β