button id="ajaxButton" type="button">Make a request</button>
<script>
(function() {
var httpRequest;
document.getElementById("ajaxButton").addEventListener('click', makeRequest);
function makeRequest() {
httpRequest = new XMLHttpRequest();
if(!httpRequest) {
alert('XMLHTTP 인스턴스를 만들 수가 없어요 ㅠㅠ');
return false;
}
httpRequest.onreadystatechange = alertContents;
httpRequest.open('GET', 'test.html');
httpRequest.send();
}
function alertContents() {
try {
if (httpRequest.readyState === XMLHttpRequest.DONE) {
if (httpRequest.status === 200) {
alert(httpRequest.responseText);
} else {
alert('There was a problem with the request.');
}
}
}
catch( e ) {
alert('Caught Exception: ' + e.description);
}
}
})();
</script>
var xmldoc = httpRequest.responseXML;
var root_node = xmldoc.getElementsByTagName('root').item(0);
alert(root_node.firstChild.data);
요청
beforeSend 부분에서 header 추가할 수 있음
결과시 Flow
Sync 동작 Callback 예제
Async 동작 Callback 예제 (default)
url: '/user',
method: 'get',
baseURL: 'https://www.domain.com/api/',
transformRequest: [function (data, headers) {
//header, data 변경
return data;
}],
transformResponse: [function (data, headers) {
//header, data 변경
return data;
}],
headers: {'X-Requested-With': 'XMLHttpRequest'}
params: {
//Query params
user-id:111
},
paramsSerializer: function (params) {
//param 직렬화
return Qs.stringify(params, {arrayFormat: 'brackets'})
},
data: {
// POST, PUT, PATCH에 사용
// common : string, plain Object, ArrayBuffer, ArrayBufferView, URLSearchParams
// brower : FormData, File, Blob
// Node : Stream, Buffer
//data
firstName: 'Test'
},
//Post에만 보내는 data사용법이 있음, bdody 포함하지않는 문법
data: 'Country=Seoul&City=Gangnam',
timeout: 1000,
withCredentials: false, // default: false, cross-site access-control 요청 유뮤
adapter: function(config) {
//테스트를 쉽게하는 사용자 정의 요청을 허용
//유효한 응답값을 제공, promise를 반환
},
auth: {
username: 'test',
pasword: 'test',
},
responseTye: 'json', // arraybuffer, document, json, text, stream, blob
responseEncoding: 'utf8', //defualt
xsrfCookieName: 'XSRF-TOKEN', //default
xsrfHeaderName: 'XSRF-TOKEN', //default
onUploadProgress: function (progressEvent) {
//progress event를 허용하는 옵션
},
onDownloadProgress: function (progressEvent) {
//progress event를 허용하는 옵션
},
maxContentLength: 2000, //응답 내용 사이즈
validateStatus: function (status) {
// promise의 resolve, reject로 보낼수 있음
return status >= 200 && staus < 300; //default
},
maxRedirects: 5, //default
socketPath: null, //node.js에서 사용하는 UNIX소켓, 예) /var/run/docker.sock
httpAgent: new http.Agent({ keepAlive: true }), //node.js에서 http요청시
httsAgent: new https.Agent({ keepAlive: true }), //node.js에서 https요청시
proxy: {
host: '127.0.0.1',
port: 9000,
auth: {
username: 'min',
password: 'pss',
}
},
cancelToken: new CancelToken(function (cancel) {
//요청을 취소하는데 사용되는 취소토큰
})
data: {
//응답하는 값
},
status: 200, // http 상태코드
statusText: 'OK' // http 상태 메시지
headers: {
// 응답에 대한 header , 소문자로 들어온다.
},
config: {
// axiom요청에 대해 제공되는 config
},
request: {
//요청했던값으로 node.js에서 마지막 ClientRequest, 브라우저의 XMLHttpRequest 값
},
- Grobal default값 설정
axios.defaults.baseURL = 'https://api.domain.com';
axios.defaults.headers.common = ['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
- Custom defaults값 설정
const instance = axios.create({
baseURL: 'https://api.domain.com'
})
instance.defaults.heaers = ['Authorization'] = AUTH_TOKEN;
//
axios.interceptors.request.use(function (config) {
// before request interceptor
//요청을 보내기 전에 응답을 가로 챌 수 있음
return config
}, function(error) {
// request error interceptor
//request error 일때
return Promise.reject(error)
}
axios.interceptors.response.use(function (config) {
// 2xx response interceptor
// 응답의 결과가 성공일때
return response;
}, function(error) {
// 2xx response가 아닐때, interceptor
// 응답의 결과가 성공이 아닐때,
return Promise.reject(error)
}
// interceptors 제거시
const myInterceptor = axios.interceptors.request.use(function () {/*...*/});
axios.interceptors.request.eject(myInterceptor);
//Custom 추가시
const instance = axios.create();
instance.interceptors.request.us(function() {/*...*/});
axios.get('/user/).catch(function (error) {
let errorJson = error.toJson() //사용시 http error에 관한 많은 정보가 있음
if (error.response) {
// response error
} else if(error.request) {
// request error
} else {
//error
}
}
const CancelToken = axios.CancelToken;
const source = CancelToken.source();
axio.get('/user/', {
cancelToken: source.token
}).catch(function (thrown) {
if (axios.isCancel(thrown)) {
} else {
}
}
//기본적으로 json을 직렬화하지만, application/x-www-form-urlencoded format를사용하기위해서는
const params = new URLSearchParams();
params.append('param1', 'value1')
params.append('param2', 'value2')
axios.post('/foo', params)
-----
node.js사용시
const querystring = require('querystring');
axios.post('http://domaon.com/', querystring.stringify({foo : 'bar'});