์ด ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ Web API์ ๋ฐ์ดํฐ๋ฅผ POSTํ๊ณ ์์ต๋๋ค.
๋ณ์ ๋งค๊ฐ๋ณ์ = {
์ธ์: {
myStringVal: '979251e4-6c9f-460d-ba32-1b6fe58ce8a3'
}
};
์ก์์ค์ค({
๋ฐฉ๋ฒ: '๊ฒ์',
URL: 'api/์์ฉ ํ๋ก๊ทธ๋จ/์ก์
/MyWebAPI ๋ฐฉ๋ฒ',
๋ฐ์ดํฐ: JSON.stringify(๋งค๊ฐ๋ณ์),
});
๋ด ์น API ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ณต๊ฐ ํด๋์ค MyClassVM
{
๊ณต๊ฐ ๋ฌธ์์ด myStringVal { get; ์ธํธ; }
}
๊ณต๊ฐ MessageVM
// ๋ด ์ฝ๋๋ ์ฌ๊ธฐ์ ๊ฐ๋ค
}
๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. myStringVal: '979251e4-6c9f-460d-ba32-1b6fe58ce8a3'์ ์ ๋ฌํ๋ฉด Web API [args.myStringVal = null ]์ null์ด ํ์๋ฉ๋๋ค.
axios POST์์ ๊ฐ์ ์ด๋ป๊ฒ ์ ๋ฌํ ์ ์์ต๋๊น?
๋ฏธ๋ฆฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค
@awais-ilyas, ๋๋ ๋น์ ์ด ์ผ๋ฐ์ ์ผ๋ก POST ํ์ด๋ก๋๋ฅผ ๋ฌธ์์ดํํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ด ์๋:
...
axios({
method: 'post',
url: 'api/Application/Action/MyWebAPIMethod',
data: args,
});
...
POST ๋ณธ๋ฌธ์ data
๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค.
๋๋ ์ต๊ทผ AJAX ์์ ์ jQuery๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์์ Axios๋ก ์ฎ๊ธฐ๊ธฐ ์์ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ๊ฐ๋จํ POST๋ฅผ ํ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์ถฉ๊ฒฉ์ ๋ฐ์์ต๋๋ค.
๊ทธ๋์ ์ฒ์ ์๋ํ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
axios.post('/api/event/item', {
event_id: eventId,
item_id: itemId,
description: description
})
.catch(function (error) {
console.log(error);
});
๋ฐฑ์๋(PHP ์ฌ์ฉ)์์ $_POST๋ ์์ ํ ๋น์ด ์์ต๋๋ค. ๊ทธ๋์ ๋๋ ์ฝ๊ฐ์ ์ธํฐ๋ท ๊ฒ์์ํ๊ณ ์ด๊ฒ์ ์๋ํฉ๋๋ค (ํด๋ฆฌํ ์ฌ์ฉ, ํ์จ).
const params = new URLSearchParams();
params.append('event_id', eventId);
params.append('item_id', itemId);
params.append('description', description);
axios({
method: 'post',
url: '/api/event/item',
data: params
});
์ด๊ฒ์ ์๋ํฉ๋๋ค. ๊ทธ๋์ URLSearchParams
๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๊น? ๋ฌธ์์์ ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ด ์๋ํด์ผ ํจ์ ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ค๋ง์ค๋ฌ์ ์ต๋๋ค.
๋ค๋ฅธ ์ฌ๋์ด์ด ๋ฌธ์ ๊ฐ ์์ต๋๊น?
@dlgoodchild ์์ ๋ฐ์ดํฐ๋ก ๋ณด๋ด์๊ฒ ์ต๋๊น? ๋ด POST ๋ณธ๋ฌธ๋ ๋น์ด ์์์ ๋ฐ๊ฒฌํ์ง๋ง ์ด๊ฒ์ ์ฌ์ฉํ์ฌ ์์๊ณผ ๊ฐ์ ๊ฒ์ผ๋ก ๋ณํํด์ผ ํ์ต๋๋ค.
...
data: params,
transformRequest: [
function(data, headers) {
const serializedData = []
for (const k in data) {
if (data[k]) {
serializedData.push(`${k}=${encodeURIComponent(data[k])}`)
}
}
return serializedData.join('&')
}
],
...
๋์ํฉ๋๋ค. POST ๊ธฐ๋ฅ์ด ์๋ํด์ผ ํฉ๋๋ค.
์ ์ข์ ์ ๊ทผ! ์ฌ๊ธฐ์ ์ฐฉ๋ฅํ๋ ๋ชจ๋ ์ฌ๋์ ์ด์ ์ ์ํด ๊ฒฐ๊ตญ 3๊ฐ์ง ๋ณํ์ ์ฌ์ฉํ์ฌ ์๋ํ๊ฒ ํ์ต๋๋ค.
์ฒ์ 2๊ฐ์ง ์ต์ ์ ๋ฌธ์ ๋ ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ๋๋ค(caniuse.com์์ ํ์ธ). ๋ง์ง๋ง์ ๋ ๋ค๋ฅธ ์ข ์์ฑ์ ๋๋ค.
transformRequest
์ต์
์ ๋ํด ์์ง ๋ชปํ์ต๋๋ค. ์ด ์ต์
์ ๋ณด๊ธฐ์ ์ข๊ณ ์ข
์์ฑ์ ์ต์ํํ๊ณ ํนํ ์ด์ ๋ฒ์ ์ ๊ฒฝ์ฐ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ์์ ์์
ํ๋ ค๋ ๊ฒฝ์ฐ ํ๋ฅญํ ์ต์
์
๋๋ค.
๋๋ ๋ฌธ์๊ฐ ๋ง์ ์ฌ๋๋ค์๊ฒ Axios๋ฅผ ์ค๋ง์ค๋ฝ๊ฒ ๋ง๋๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. Axios๋ฅผ ์ฌ์ฉํ๋ POST์ ๊ด๋ จ๋ StackOverflow ์ง๋ฌธ์ ์๋ ์ด๋๊ฐ์ ๋ฌธ์ ๊ฐ ์๊ณ ์ผ๋ฐ์ ์ธ ์คํด๊ฐ ์๋ค๋ ์ข์ ํ์์ ๋๋ค.
๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค - ์ฐ๊ตฌ์ ๋ช ์๊ฐ์ ๋ณด๋๊ณ ๋ง์นจ๋ด์ด ๋ฌธ์ ๋ฅผ ์ฐพ์์ต๋๋ค. ์๊ฐ: POST๋ ๋ณต์กํ์ง ์์์ผ ํ๋ฉฐ ์ข ์์ฑ์ด๋ ์ถ๊ฐ ๊ตฌ์ฑ์ด ํ์ํ์ง ์์์ผ ํฉ๋๋ค. ์ด๊ฒ์ ๋ค์ AngularJS 1์ฒ๋ผ ๋๊ปด์ง๋๋ค. ์ง๊ธ์ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณ์ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
@yuri-wisestamp๋ ๋ ์ด์ ๋์ํ ์ ์์ต๋๋ค. ๋งค์ฐ ์ด์ํ๊ณ ํน์ดํ ๋์์ธ ์ ํ์ ๋๋ค. ๋๋ ์ฒ์๋ถํฐ ์ด๊ฒ์ ๋ฐฐ์นํ ์ข์ ๋ฌธ์๊ฐ ๋ถ์กฑํ์ฌ ๋๋ฒ๊น ์ ์์ด๋ฒ๋ฆฐ ์๊ฐ์ผ๋ก ์ธํด ๋ํผํ๋ค๊ณ ๋๊ผ๊ธฐ ๋๋ฌธ์ ์ง๊ธ์ ๋๋ถ๋ถ ์ฌ์ฉ์ ์ค๋จํ์ต๋๋ค.
Axios ๋ฐ PHP๋ก ๊ฒ์ํ๋ ๊ฒ์ ์ง์ ํ ์ ๋ชฝ์ ๋๋ค!
2์๊ฐ์ ๋ณด๋๋๋ฐ ์๋ฌด๋ฐ ๊ฒฐ๊ณผ๊ฐ ์์์ต๋๋ค...
ํ์์ด ์ธ์ฝ๋ฉ๋์ง ์์ ๊ฒ์๋ฌผ์ PHP์์ $_POST๋ฅผ ์ฑ์ฐ์ง ์์ต๋๋ค. ๊ฒ์๋ฌผ ๋ณธ๋ฌธ์ ์ฝ์ด์ผ ํฉ๋๋ค.
$body = file_get_contents('php://input');
json์ด ์์๋๋ ๊ฒฝ์ฐ:
$json=json_decode($body);
์ด ์ฝ๋:
axios = require('axios');
var param = {
args: {
myStringVal: '979251e4-6c9f-460d-ba32-1b6fe58ce8a3'
}
};
axios({
method: 'post',
url: 'http://home.test/post.php',
data: param,
});
์ด์ ๋ํด ์๋ฒ์์:
<?php
$entityBody = file_get_contents('php://input');
file_put_contents(__DIR__ . '/output.txt', print_r(json_decode($entityBody), true));
์ด ์ถ๋ ฅ์ ์์ฑํ์ต๋๋ค.
stdClass Object
(
[args] => stdClass Object
(
[myStringVal] => 979251e4-6c9f-460d-ba32-1b6fe58ce8a3
)
)
๋ด ๋ฌธ์ ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ์ต๋๋ค.
โuserSearchParams()๋ ๋ชจ๋ ๊ณณ์์ ์๋ํ์ง ์์ต๋๋ค( https://caniuse.com/#search =URLSearchParams() )
let params = new URLSearchParams();
params.append('email', this.email );
params.append('url', userInfo.url );
this.$http.post(
'http://localhost:9999/api/record.php', params
)
.then((response) => {
if (response.data.message === "success" ) this.$router.push( 'thankyou' );
})
.catch( (error) => console.log(error) ) ;
print_r( $_POST );
// $_POST['email'] = '[email protected]'
// $_POST['url'] = 'http://google.fr'
qs๋ฅผ ์ค์นํ์ฌ ์๋ํ๋๋ก ํ์ต๋๋ค.
import qs from "qs";
const params = {
name: "User",
startTime: "2:00PM",
endTime: "3:00PM",
status: "pending",
invitation: "test",
};
axios.post("DOMAIN/event/new", qs.stringify(params))
.then((response) => {
console.log(response);
})
.catch((error) => {
console.log(error);
});
@Legym ๊ฐ์ฌํฉ๋๋ค! q.stringify๋ฅผ ์ฌ์ฉํด๋ ์์ ์ด ์๋ฃ๋์์ต๋๋ค! ์ ์ฅ, POST ์์ฒญ์ด ์ ๋๋ก ์๋ํ์ง ์์ axios ์ฌ์ฉ์ ์ค๋จํ๋ ค๊ณ ํ์ต๋๋ค!
๊ฐ์ฌํฉ๋๋ค!
์ค์ ๋ก ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด๋ ๋ ๋์ ์๋ฃจ์ ์ ์ฐพ์์ต๋๋ค. ๊ฒ์ ์์ฒญ ํค๋๋ ์์์ผ๋ก ์ค์ ๋ฉ๋๋ค. JSON ๊ฐ์ฒด๋ฅผ ๋ณด๋ด๋ ๊ฒฝ์ฐ ํค๋๋ฅผ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
const params = {
name: "User",
startTime: "2:00PM",
endTime: "3:00PM",
status: "pending",
invitation: "test",
};
axios.post('DOMAIN/event/new', params, {
headers: {
'content-type': 'application/json',
},
})
@Legym ์ ๋ง ๊ฐ์ฌํฉ๋๋ค!
POST๊ฐ ์๋ํ์ง ์๋ ์ด์ ๋ฅผ ์ ๋ง ์ดํดํ์ง ๋ชปํฉ๋๋ค. Legym์ ํค๋๋ ๋๋ฅผ ์ํด ๊ทธ๊ฒ์ ๊ณ ์น ์ ์์ต๋๋ค.
jquery๊ฐ ๋จผ์ ์๋ํ์ฌ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
URLSearchParams ์ ๊ทผ ๋ฐฉ์์ macOS์ Safari์์ ์๋ํ์ง ์์ต๋๋ค.
axios๋ฅผ ํตํด ํ์ผ๊ณผ ๋ฐ์ดํฐ๋ฅผ POSTํ ์ ์๋ ์ฌ๋์ด ์์ต๋๊น?
PHP์ Laravel ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
@latanoil ์์งํ ๋งํด์ axios๋ฅผ ์ฌ์ฉํ๋ ๋ฐ์๋ ์ฅ์ ์ด ๊ฑฐ์ ๋๋ ์ ํ ์์ต๋๋ค. ๋ ๊ฐ๋จํ๊ณ , ๋ ์ ์ง์๋๊ณ , ๋ ์ ๋ฌธ์ํ๋ Ajax ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณ ์ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค. Jquery๋ ์๋๋๊ณ ํ ์คํธ๋์์ผ๋ฉฐ ์๋ฒฝํ๊ฒ ์๋ํ๋ฉฐ ์ฌ๊ธฐ์์ ์ฐพ์ ์ ์๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์กฐ์ธ์ ์ฃผ์ @dlgoodchild ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋๋ ๋ฉฐ์น ๋์ ์ด๊ฒ์ผ๋ก ๊ณ ์ํ์ต๋๋ค. ์ ๋ ๊ทธ๋ฅ jQuery๋ฅผ ๊ณ ์ํ ๊ฒ์ ๋๋ค.
axios({
method: 'post',
url: 'http://blahblahblah',
params: {
key1: value1,
key2: value2
}
})
์ด๋ฐ ์์ผ๋ก ์์ ํ๋ ค๋ฉด _data_๊ฐ ์๋ _params_๋ฅผ ์ฌ์ฉํ์ญ์์ค.
LOL ๋๋ ์ด๊ฒ์ด ์ผํ๊ธฐ๊ฐ ๋๋ฌด ์ด๋ ค์ ๋ค๋ ๊ฒ์ ๋ฏฟ์ ์ ์์ต๋๋ค.
_this_ ๊ธฐ๋ณธ์ ์ธ ๊ฒ, _this_ ... _common_, ์ด๋ ต์ง ์์์ผ ํฉ๋๋ค.
@HelsingMatt ์๋์ ์ ์๊ฒ ํจ๊ณผ๊ฐ ์์์ต๋๋ค. $_GET๊ณผ ํผ๋ํ์ ์ ์์ต๋๋ค. 'params'๊ฐ GET์์ ์๋ํ๊ฒ ํ๋ ๋ฐ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฌ๋ POST์์๋ ์๋ํ์ง ์์์ต๋๋ค.
@malochine ํฅ๋ฏธ๋กญ์ต๋๋ค. node.js์์ POST์ ํจ๊ป _params_๋ฅผ ์ฌ์ฉํฉ๋๋ค.
@HelsingMatt ์๊ฒ ์ต๋๋ค . ๋๋ PHP๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. axios๊ฐ PHP๋ก ์์ ํ ์๋ง์ด ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. PHP ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น?
@malochine ์ ์์ง PHP๋ฅผ ๋ฐฐ์ด ์ ์ด ์์ผ๋ฉฐ ๋ชจ๋ ๋ฐฑ์๋๋ node.js๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋๋ PHP๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ด๋ค ๊ฒฝ์ฐ์๋ json(๋ณดํต)์ ์ํ๋ฏ๋ก ๊ทธ์ ๋ฐ๋ผ ํค๋๋ฅผ ์ค์ ํฉ๋๋ค. $_POST๋ฅผ ์ฑ์ฐ๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ q์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ฟผ๋ฆฌ ๋ฌธ์์ด๋ก ๋ณํํ๊ธฐ ์ํด ๋ ์์ ์์ฒด ๊ตฌํ(๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํ์ง๋ ์์ง๋ง ๋์๊ฒ ์ ํฉํจ)์ ์ฌ์ฉํฉ๋๋ค.
์ด๋ฌํ ๊ธฐ๋ฅ ์ค ํ๋์ ๋ํ ์๋ ์ด SO ๊ฒ์๋ฌผ์ ์ฐธ์กฐํ์ญ์์ค. https://stackoverflow.com/a/1714899/6728516
Axios์ ์ด ๋จ์ ์ ์ค๋ซ๋์ ์ฃผ์ ๋ฌธ์์์ ๋ค๋ฃจ์ด์ ธ ์์ง๋ง, ์กฐ๊ธ ๋ ์ค๋ช ์ ์ผ ์ ์๋ค๋ ์ ์ ์ธ์ ํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก JSON์ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ๋ ๋ค์ฌ๋ค๋ฅํด์ ๋ ์ด์ ์ด ์์ ์ ์ํํ๋ ๊ฒฝ์ฐ๊ฐ ๊ฑฐ์ ์์ต๋๋ค. PHP์์ ๊ฒ์๋ JSON์ ๊ฒ์ํ๋ ๋ฐฉ๋ฒ์ ์์ ๋ด ์ค๋ช ์ ์ฐธ์กฐํ์ญ์์ค.
์ด๋ฐ ์ ์ฅ.
์์์ ๋ํ ํ์ค API ๊ธฐ๋ฅ์ ์ค๋จํ๊ณ ์ถ์ง ์์๊ธฐ ๋๋ฌธ์ fallback ์ ์ถ๊ฐํด์ผ ํ์ต๋๋ค.
if(empty($_POST['dep_date'])) {
$body = file_get_contents('php://input');
$json = json_decode($body, true);
$_POST['dep_date'] = $json['dep_date'];
.....
์ด ์ข๊ฒ๋ php ์ธก์ ์ ๊ทผํ ์ ์์์ต๋๋ค. ์ธ๋ถ API๋ผ๋ฉด ยงยงยง ์ ๋๋ค. vue์ ๋ํ ๋ชจ๋ ajax ํด๋ผ์ด์ธํธ๋ฅผ ๋์ดํ ๋ ์ด์ ๋ํ ๊ฒฝ๊ณ ๊ฐ ์์ด์ผ ํฉ๋๋ค. :)
"params"๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ ํจ๊ป ์๋ํ๊ณ PHP๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด๊ฒ์ nativescript-vue 2.0.0 ๋ด๋ถ์ axios์
๋๋ค.
@HelsingMatt ๊ฐ์ฌํฉ๋๋ค!
qs๋ฅผ ์ค์นํ์ฌ ์๋ํ๋๋ก ํ์ต๋๋ค.
import qs from "qs"; const params = { name: "User", startTime: "2:00PM", endTime: "3:00PM", status: "pending", invitation: "test", }; axios.post("DOMAIN/event/new", qs.stringify(params)) .then((response) => { console.log(response); }) .catch((error) => { console.log(error); });
ํผ
๋ชจ๋ cors ํค๋ ๋ฐ ์ฝํ ์ธ ์ ํ์ด ํฌํจ๋ php ๋ฐฑ์๋ ์ฝ๋๋ฅผ ๊ฒ์ํ ์ ์์ต๋๊น? ๋๋ ๋ ๊ฐ์ง axios๋ฅผ ๋ชจ๋ ์๋ํ์ง๋ง ๋ ๋ค ์๋ํ์ง ์์ต๋๋ค.
๋ฌธ์์ ์ค์์ฒ๋ผ ๋ณด์ด์ง๋ง params ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฉฐ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉฐ ์๋ํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์ดํดํ๋ ๋ฐ 2 โโ์๊ฐ์ ๋ณด๋์ต๋๋ค ((
์ก์์ค์ค({ ๋ฐฉ๋ฒ: '๊ฒ์', url: 'URL', ๋งค๊ฐ๋ณ์: { ํต์ฌ ๊ฐ์น } })
Daniil๋ ๊ฐ์ฌํฉ๋๋ค. ๋์์ ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ์๋ ค์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค
์ค๋ฅ.
2018๋ 11์ 10์ผ ํ ์์ผ ์ค์ 11์ 18๋ถ Daniil [email protected] ์ด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ์ต๋๋ค.
๋ฌธ์์์ ์ค์์ฒ๋ผ ๋ณด์ด์ง๋ง params ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค.
๋ฐ์ดํฐ๊ฐ ์๋ํ๊ณ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์ดํดํ๋ ๋ฐ 2 โโ์๊ฐ์ ๋ณด๋์ต๋๋ค ((์ก์์ค์ค({
๋ฐฉ๋ฒ: '๊ฒ์',
URL: '/wp-admin/admin-ajax.php?action=data_fetch',
๋งค๊ฐ๋ณ์: {
ํต์ฌ ๊ฐ์น
}
})โ
๋น์ ์ด ๋๊ธ์ ๋ฌ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/axios/axios/issues/1195#issuecomment-437612819 ๋๋ ์์๊ฑฐ
์ค๋ ๋
https://github.com/notifications/unsubscribe-auth/ApIWeUP45k17b70vsaT80KR1g_cxXcMvks5utyZzgaJpZM4Ql8j5
.
๋ด ๋ฌธ์ ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ์ต๋๋ค.
์
โuserSearchParams()๋ ๋ชจ๋ ๊ณณ์์ ์๋ํ์ง ์์ต๋๋ค( https://caniuse.com/#search =URLSearchParams() )
let params = new URLSearchParams(); params.append('email', this.email ); params.append('url', userInfo.url ); this.$http.post( 'http://localhost:9999/api/record.php', params ) .then((response) => { if (response.data.message === "success" ) this.$router.push( 'thankyou' ); }) .catch( (error) => console.log(error) ) ;
๋ค
print_r( $_POST ); // $_POST['email'] = '[email protected]' // $_POST['url'] = 'http://google.fr'
๋ง์ ๋์์ด ๋ฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค!
axios({ method: 'post', url: 'http://blahblahblah', params: { key1: value1, key2: value2 } })
์ด๋ฐ ์์ผ๋ก ์์ ํ๋ ค๋ฉด _data_๊ฐ ์๋ _params_๋ฅผ ์ฌ์ฉํ์ญ์์ค.
ํจ์ฌ ๋ ๊นจ๋ํ ์ ๊ทผ ๋ฐฉ์ ๋๋ถ์ ์ ์๊ฒ๋ ํจ๊ณผ์ ์ ๋๋ค.
๊ธฐ๋ณธ URL๋ก ์ด๋ฏธ ์์ฑ๋ Axios ์ธ์คํด์ค๊ฐ ์์ต๋๋ค.
๋๋ ๊ทธ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ์ฌ ํฌ์คํธ๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค. ์ฌ๋ฐ๋ฅธ ์ค์ ์ ๋ฌด์์ ๋๊น?
์ด๊ฒ์ ์๋ํฉ๋๋ค:
axios({
method: "post",
url: "https://slack.com/api/chat.postMessage",
params: {
token: this.token,
channel: this.channel,
text: "Testing API"
},
transformRequest: [
(data, headers) => {
console.log("data-in-transform", data);
delete headers.post["Content-Type"];
return data;
}
]
});
์ด๊ฒ์ ์๋ํ์ง ์์ต๋๋ค:
ax = axios.create({
baseURL: `https://slack.com/api/`,
params: {
token: this.token,
channel: this.channel
},
withCredentials: false,
transformRequest: [
(data, headers) => {
delete headers.post["Content-Type"];
return data;
}
]
});
this.ax.post("chat.postMessage", {
withCredentials: false,
params: {
text: "Testing API"
},
transformRequest: [
(data, headers) => {
console.log("data-in-transform", data);
delete headers.post["Content-Type"];
return data;
}
]
});
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด 15์ผ์ ๋ณด๋์ต๋๋ค.(์ฌ๊ธฐ์ ์ฝ๋๊ฐ ์์ต๋๋ค.
Axios({
method: apiMethod,
url: root_url, // Api URL
data: (apiMethod === 'POST')? Qs.stringify(apiParams) : undefined, // API post parameters,
params:(apiMethod === 'get')? apiParams : undefined, //API get params
headers:{
'Accept': 'application/json',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
},
}).then(function (response) { // On Success
console.log('Response', response.data );
successCallback(response.status, response.data);
})
.catch(function (error) { // On Failure
console.log('error', error);
errorCallback(error.status, error.data);
})
.then(function () { // Always
alwaysCallback(false);
});
์ ๋ง ๋์ฐํฉ๋๋ค. POST ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ ๋ํ ๊ธด ๋ ผ์๊ฐ ์๊ณ ๊ฒฐ๊ตญ ์ฐ๋ฆฌ๋ ์์ง ๊ตฌ์ฒด์ ์ธ ํด๊ฒฐ์ฑ ์ด ์์ต๋๋ค.
๋๋ ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์์ผ๋ฉฐ ์ด๋ฏธ 3์ผ์ ๋ณด๋์ต๋๋ค. ๊ฐ๋ฅํ ๋ชจ๋ ์กฐํฉ๊ณผ ์ต์
์ ์๋ํ์ง๋ง ์ฌ์ ํ ๊ฐ์ ์ํฉ์ ์ฒํด ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ด ๋ฐฑ์๋๋ PHP๋ก ์์ฑ๋์์ต๋๋ค. ์ ๋ axios
์ POST์ PHP ์กฐํฉ์ ํฐ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ ๋จ์ํ ๋ฐ์ ๋ค์ฌ์ง์ง ์์ต๋๋ค!!
jQuery๋ ์ด๋ฌํ ์์ ์ ๋งค์ฐ ์ ์ฒ๋ฆฌํ๋ฏ๋ก ๋ค์ jQuery๋ก ์ ํํ๊ฒ ์ต๋๋ค. POST ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ํด ์ถ๊ฐ ์ข ์์ฑ์ ์ค์นํ๊ณ ์ถ์ง ์์ต๋๋ค!
๋ํ ์ ์ ํ ํด๊ฒฐ์ฑ ์์ด ์ค๋ ๋๊ฐ ๋ซํ๋๋ค !!
@awais-ilyas์ ์ํด ํ์๋์์ผ๋ฉฐ, ๊ฐ๋ฅํ๋ค๋ฉด ๋ค์ ์ด์ด์ผ ํฉ๋๋ค.
์! ๊ทธ๋ฌ๋ ์ค์ ๋๋ฅผ ์ด๋๋ก ๋ฐ๋ ค๊ฐ์ง ์์ต๋๋ค. JSON ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ PHP์ POST ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ ์ฌ์ ํ โโ๊ณ ํต์ค๋ฝ์ต๋๋ค! @dlgoodchild ๋ด๊ฐ ์ด ์ค๋ ๋์ ๋ฆ๊ฒ ์๊ธฐ ๋๋ฌธ์ ์์ง ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์ @emfluenceindia ์ด ์ค๋ ๋์๋ JSON์ ์ฌ์ฉํ ํ์๊ฐ ์๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ๋ง์ด ์ธ๊ธ๋์ด ์์ต๋๋ค.
๋๋ ๊ทธ๋ค์ ๋ณด์๋ค. ์ด๊ฒ์ ์ฌ์ ํ โโJSON์ผ๋ก POSTํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๊น?
์ด ์ค๋ ๋๋ JSON ๊ฒ์์ ๊ดํ ๊ฒ์ด ์๋๋๋ค. JSON์ ๊ฒ์๋ฌผ ๋ณธ๋ฌธ์ผ๋ก ๊ฒ์ํ๋ ๊ฒ์ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค. ์ด ์ค๋ ๋๋ jQuery์ ๊ฐ์ด data: ์์ฑ์ ์ฌ์ฉํ๊ณ PHP์์ $_POST๋ฅผ ์ฑ์ฐ๋ ๊ฒ์ ๊ดํ ๊ฒ์ ๋๋ค.
๋๋ ์ต๊ทผ AJAX ์์ ์ jQuery๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์์ Axios๋ก ์ฎ๊ธฐ๊ธฐ ์์ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ๊ฐ๋จํ POST๋ฅผ ํ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์ถฉ๊ฒฉ์ ๋ฐ์์ต๋๋ค.
๊ทธ๋์ ์ฒ์ ์๋ํ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
axios.post('/api/event/item', { event_id: eventId, item_id: itemId, description: description }) .catch(function (error) { console.log(error); });
๋ฐฑ์๋(PHP ์ฌ์ฉ)์์ $_POST๋ ์์ ํ ๋น์ด ์์ต๋๋ค. ๊ทธ๋์ ๋๋ ์ฝ๊ฐ์ ์ธํฐ๋ท ๊ฒ์์ํ๊ณ ์ด๊ฒ์ ์๋ํฉ๋๋ค (ํด๋ฆฌํ ์ฌ์ฉ, ํ์จ).
const params = new URLSearchParams(); params.append('event_id', eventId); params.append('item_id', itemId); params.append('description', description); axios({ method: 'post', url: '/api/event/item', data: params });
์ด๊ฒ์ ์๋ํฉ๋๋ค. ๊ทธ๋์
URLSearchParams
๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๊น? ๋ฌธ์์์ ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ด ์๋ํด์ผ ํจ์ ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ค๋ง์ค๋ฌ์ ์ต๋๋ค.๋ค๋ฅธ ์ฌ๋์ด์ด ๋ฌธ์ ๊ฐ ์์ต๋๊น?
๋๋ ์ค๋์ด ๋ฌธ์ ๋ฅผ ๋ง๋ฌ๊ณ ๊ฑฐ์ ํ๋ฃจ ์ข
์ผ ์ด๊ฒ์ ๋ณด๋์ต๋๋ค. s weird because the document of axios told me to use first method which didn
์๋ํฉ๋๋ค. ๊ณ ๋ง์, ํ
๋ํฌ๋ค์ ๋ฃ์๋?
app.use(express.json())
app.js์์?
์ด ์ ๋๋ฉด ์ถฉ๋ถํฉ๋๋ค.
const formData = new FormData();
formData.append('action', 'some-action');
formData.append('page', 1);
axios
.post('/async/index.php', formData, {
retry: 3,
retryDelay: 100,
})
.then(res => {
console.log('get', res.data);
})
.catch(console.log);
PHP
print_r($_POST);
๋๋ต์ ๋ค์์ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค. Axios๋ ๊ธฐ๋ณธ์ ์ผ๋ก url-form-encoded๋ฅผ ์ฌ์ฉํฉ๋๋ค.
headers: {
"Content-Type": "text/plain"
}
์ด ์๋ฃจ์
์ค ์ด๋ ๊ฒ๋ ์ ์๊ฒ ํจ๊ณผ๊ฐ ์์๊ณ , config ๊ฐ์ฒด๊ฐ ์ ๋ฌ๋ _3๋ฒ์งธ ์ธ์_์ด๊ธฐ ๋๋ฌธ์ ๊ฒ์ ์์ฒญ์ ๋ํ _๋ฐ์ดํฐ ๊ฐ์ฒด๊ฐ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ node.js ์ฌ์ฉ์์ ๊ฒฝ์ฐ README๊ฐ ์คํด์ ์์ง๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. .post
ํจ์์๋ ์ด ์ธํฐํ์ด์ค๊ฐ ์์ต๋๋ค.
post(url: string, data?: any, config?: AxiosRequestConfig): AxiosPromise;
๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด .post
ํจ์๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค.
await axios.post(
`http://localhost:3000/your/path/here`,
{},
{
params: {
ID: 12345,
name: 'testUser',
},
},
);
@NathanielRN ์ด ์๋ฃจ์ ์ ์๋ํ์ง๋ง ์ต์ ์ ์๋๋๋ค. URL์ ๋ชจ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํฉ๋๋ค. "์ป๋ค"์ ๋น์ทํฉ๋๋ค.
@NathanielRN ์ด ์๋ฃจ์ ์ ์๋ํ์ง๋ง ์ต์ ์ ์๋๋๋ค. URL์ ๋ชจ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํฉ๋๋ค. "์ป๋ค"์ ๋น์ทํฉ๋๋ค.
@nicolardi ์ฃ์กํฉ๋๋ค. URL ์์ฒญ ์ฑ๋ฅ์ ์ต์ํ์ง ์์ต๋๋ค. URL์ ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ต์ ์ด ์๋ ๋์? "get"๊ณผ ๊ฐ๋๋ผ๋?
Axios๋ ์ฃผ๋ณ์์ ๊ฐ์ฅ ์ ๋ช ํ ํด๋ผ์ด์ธํธ์ด์ง๋ง ์ด๋ฌํ ๊ฒฐํจ์ด ์์ต๋๋ค. ์ค๋ง์ค๋ฝ๋ค.
์์ฌ ์ฌ๊ฐ
๋ฌธ์ ๋ Axios์ ์๋ ๊ฒ์ด ์๋๋๋ค. ๋์ผํ ๋งค๊ฐ๋ณ์(๋ฉ์๋: Post, Body: {"something":"value"}, ํค๋๋ json์ผ๋ก ์ค์ )๋ก cURL ๋๋ Postman์ ์ฌ์ฉํ๋ฉด ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ Vue, React, Angular(๋ฌด์์ด๋ )์์ Axios ๋๋ Fetch API๋ฅผ ์ฌ์ฉํ์ฌ ์ํํ๋ ๊ฒฝ์ฐ Chrome ๋๋ (๋ค๋ฅธ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ) ์์ฒญ ๋ฐฉ๋ฒ(๋คํธ์ํฌ ํญ ์ฐธ์กฐ)์ OPTIONS๊ฐ ์๋ OPTIONS๋ก "๋ณ๊ฒฝ"ํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ๋ ์ด์ ๊ฒ์ํ์ญ์์ค. ๊ทธ ์ด์ ๋... CORS(๊ต์ฐจ ์ถ์ฒ ์์ ๊ณต์ )์ ๋๋ค. NestJS๋ฅผ ์ฌ์ฉํ์ฌ API๋ฅผ ๋ง๋ค๊ณ CORS๋ฅผ ํ์ฑํํ๋ ๊ฒ์ ์์๊ธฐ ๋๋ฌธ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ํ์ฑํ๋๋ฉด ์์ฒญ ๋ฐฉ๋ฒ์ด POST๋ก ์ ์ง๋๊ณ (์ํ๋ ๋๋ก) Axios๋ JSON(๋๋ ๋ค๋ฅธ ํ์)์ ๋ฐํํ ์ ์์ต๋๋ค. ์ผ๋ถ ํ๋ ์์ํฌ๋ CORS๋ฅผ ์๋์ผ๋ก ์ค์ ํฉ๋๋ค(์: Laravel). ๋ค๋ฅธ ํ๋ ์์ํฌ๋ ์๋์ผ๋ก ์ค์ /ํ์ฑํํด์ผ ํฉ๋๋ค.
์ด ์ ๋๋ฉด ์ถฉ๋ถํฉ๋๋ค.
const formData = new FormData(); formData.append('action', 'some-action'); formData.append('page', 1); axios .post('/async/index.php', formData, { retry: 3, retryDelay: 100, }) .then(res => { console.log('get', res.data); }) .catch(console.log);
PHP
print_r($_POST);
@jonataswalker ์ ์๋ฃจ์ ์ Axios๋ฅผ ์ฌ์ฉํ์ฌ POST๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค. FormData()๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์๊ฒ ํจ๊ณผ์ ์ด์์ต๋๋ค.
๊ทธ๋์ ๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋๋ ๋ด ์ ๋ฉด์ Vue.js๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ๋ง์ง๋ง ๋ฒ์ (axios ๋ฐ vue)์ผ๋ก ์ ๋ฐ์ดํธํ ์ดํ๋ก ์ด๋ค ์์ผ๋ก๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ๋ด ๋ง์ง๋ง ํ๋ก์ ํธ์์๋ ์ด๋ค ํ์์ผ๋ก๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์์์ต๋๋ค.
axios.post('/actions/posts/create_questionnaire' , { questionnaire : form })
๊ฒ์๋ฌผ์ด ์๋ํ์ง ์์ผ๋ฉด ์ด์ ๋ฒ์ ์ axios์ ์ฌ์ฉ ์ค์ธ ํ๋ฆฌ์ํฌ๋ฅผ ์ฌ์ฉํด ๋ณด์ญ์์ค.
django ๋ฐฑ์๋์์ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋คํํ GET์ ์ฌ์ฉํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ง๋ง axios.post๋ ํ์คํ ๋ฌธ์ํ๋ ๋๋ก ์๋ํ์ง ์์ต๋๋ค.
axios ๋ฌธ์ ๊ฐ ์๋๋ผ cors ๋ฌธ์ ์ผ ์๋ ์์ต๋๋ค.
๋
ธ๋ ์๋ฒ์์ PHP ๋ฐฑ์๋๋ก ๊ฒ์ํ๋ ๊ฒฝ์ฐ PHP ์คํฌ๋ฆฝํธ์ cors๊ฐ ์์ด์ผ ํฉ๋๋ค.
https://stackoverflow.com/a/55392661
๋ํ $_POST๋ฅผ ์ฌ์ฉํ์ง ์๊ณ $data = file_get_contents('php://input');
์ด๊ฒ์ PHP์์ $_POST ๊ฐ์ ๊ฒ์ํ๊ธฐ ์ํด ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
axios.post(url, {test: 'dafasfasfa'},{
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
"Access-Control-Allow-Origin": "*"
}
})
@alvarotrigo ์ @latanoel ์ ์์ด๋์ด๋ฅผ ์กฐํฉํ์ฌ ๋ง์นจ๋ด ์ด์ ๊ฐ์ django ๋ฐฑ์๋(cors๊ฐ ์ค์น ๋ฐ ๊ตฌ์ฑ๋จ)๋ก ์์ ํ๊ฒ ๋์์ต๋๋ค.
const formData = new FormData();
formData.append('a1', this.form.a1);
formData.append('a2', this.form.a2);
formData.append('a3', this.form.a3);
axios
.post(url, formData, {
headers: {
'Content-type': 'application/x-www-form-urlencoded',
}
})
etc
๋ฌธ์์์ ์ ์ํ ๋๋ก POST ์ธ์๋ฅผ ์ธ๋ผ์ธ์ผ๋ก ํฌํจํ๋ฉด ๋ฐฑ์๋์์ POST๊ฐ ๋น์ด ์์ต๋๋ค. ๋ํ cors๋ฅผ ์๋ฐํ๊ธฐ ๋๋ฌธ์ Access-Control-Allow-Origin์ ์ค์ ํ ์ ์์ต๋๋ค.
๋ํ์ด ๋ฐฉ๋ฒ์ ํตํด ์บ
const paramsCompose = (formData) => {
const str = [];
for (let p in formData) {
str.push(encodeURIComponent(p) + '=' + encodeURIComponent(formData[p]));
}
const body = str.join('&');
console.log('PARAMS ' + body);
return body;
};
๊ทธ๋ผ ๋น์ ์ ...
return axios.post(url,
paramsCompose({
image_url: image_url,
cover_name: cover_name
}))
.then(res => {
const tx = res.data;
console.log(tx);
return res.data
});
๋ฉฐ์น ํ ์ด์ ์ต์ ์ ๋ชจ๋ ์๋ํ์ง๋ง ์ฌ์ ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์ฑ๊ณตํ์ง ๋ชปํ์ต๋๋ค.
์ค์ ๋ก ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ์ฌ๊ฐํ๋ค๋ ๊ฒ์ ๋ฏฟ์ ์ ์์ต๋๋ค ... ์ฃ์กํ์ง๋ง ๋ค๋ฅธ API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋์์ฌ ๊ฒ์ ๋๋ค. ๊ตฟ๋ฐ์ด ์ก์์ค์ค.
@fabriciobraga ๋ด ์์ฉ ํ๋ก๊ทธ๋จ์์๋ ์ ์ด๋ฐ ์ผ์ด ๋ฐ์ํ๋์ง ์์ ๋ด๋ ค๊ณ ๋
ธ๋ ฅํ์ต๋๋ค. ๋๋ ํ๋ฃจ ์ข
์ผ ํด๊ฒฐ์ฑ
์ ์ฐพ๊ธฐ ์ํด ์ธํฐ๋ท์ ๋ค์ก๋ค. ๊ทธ๋ฐ๋ฐ ์๊ณ ๋ณด๋ ์์ฃผ ๊ฐ๋จํ ๋ฌธ์ ์์ต๋๋ค. ๋ด ์ฌ์ฉ์ create action
์ฒ์์๋ ๋ค์๊ณผ ๊ฐ์์ต๋๋ค.
createUser(context, user) {
this.$axios.$post("/api/users/", user).then(response => {
context.dispatch("fetchUsers");
});
}
user
๋งค๊ฐ๋ณ์์๋ ์ ์ฌ์ฉ์์ email
๋ฐ password
๊ฐ ํฌํจ๋ ๊ฐ์ฒด๊ฐ ์์ต๋๋ค. console.log
์ฌ์ฉ์ ๊ฐ์ฒด๋ฅผ ์๋ํ๋๋ฐ ์์ฑ์ด ์ ์๋์ง ์์๋ค๊ณ ๋ณด๊ณ ํ์ต๋๋ค! ๐ค
๊ทธ๋์ $post ๋ฉ์๋์ ์ ๋ฌํ ๋ ์ฌ์ฉ์ ๊ฐ์ฒด๋ฅผ ํผ๋จ๋ ธ๊ณ ์ด์ ์๋ํฉ๋๋ค!
this.$axios.$post("/api/users/", {...user})
์ ๊ฒฝ์ฐ์๋ ์ฌ์ฉ์ ๊ฐ์ฒด๊ฐ ๋น ๊ฐ์ฒด๋ก ์ ์ก๋์๊ณ ๋ด API์์ ๊ทธ๋ ๊ฒ ๋ณด๊ณ ํ์ต๋๋ค. ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์๋ค๋ฉด ์ด๊ฒ์ ์๋ํด์ผ ํฉ๋๋ค.
๋ ๋ค๋ฅธ ๊ฐ๋ฅํ ์๋๋ฆฌ์ค๋ ๋ฐ์ดํฐ๊ฐ ์ ๋๋ก ์ ์ก๋๊ณ ์์ง๋ง API๊ฐ ๊ธฐ๋ํ๋ ํ์์ด ์๋ ๊ฒฝ์ฐ์ ๋๋ค(์: PHP ์คํฌ๋ฆฝํธ์ ์ผ๋ฐ์ ์ธ ํ์์ ์์ ๋ฐ์ดํฐ์ด์ง๋ง ๋๋ถ๋ถ์ Node.js API๋ JSON์ ์์ํจ). ๊ทธ๋์ ๋น์ ์ ์ด๊ฒ์ ์์๋ผ ํ์๊ฐ ์์ต๋๋ค. ์์ ํ ๋ก ์ ์ฐธ์กฐํ์ญ์์ค .
๋ถ๋ช
ํ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์
axios.post("api", { API: 1, version: "0.1b"...})....
๋ด Java ๋๋จธ์ง ์๋ฒ์ ๋๋ฌํ๋ฉด ๋น API ๋ฐ ๋ฒ์ ์ด ํ์๋ฉ๋๋ค.
3๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ก ๋ณด๋ผ ๋, ์ฆ
axios.post("api", null, { params: {API: 1, version: "0.1b"...}})....
์์๋๋ก ์๋ํฉ๋๋ค
์ด๊ฒ์ ๊ฐ์ฅ ๋ง์ด ์ธ๊ธ๋๊ณ ์ด๋ฆฐ ๋ฌธ์ ์ค ํ๋์ ๋๋ค. ์ด ์ค๋ ๋์ ๋ชจ๋ ๋๊ธ์ ์ฝ์์ต๋๋ค. ๋ง์ ์ฌ์ฉ์๊ฐ axios๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ๋ฐฉ๋ฒ์ ํผ๋ํ์ต๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ์กฐํ์ ๋๋ ๊ฒฐ๋ก ์ ๋ด๋ ธ๊ณ ์๋ก์ด ์ฌ์ฉ์๋ ๋ค์ ๊ธธ์ ๋์ณค์ต๋๋ค.
axios๋ ์์ฒญ ํด๋ผ์ด์ธํธ์ผ ๋ฟ์ ๋๋ค. ์์ํ ์๋ต์ ๋ณด์ง ๋ชปํ๋ค๋ฉด axios๊ฐ ๋ณด๋ด๋ ๋ด์ฉ์ด ์๋ฒ๊ฐ ๊ธฐ๋ํ๋ ๊ฒ๊ณผ ์ผ์นํ๋์ง ํ์ธํ์ญ์์ค. ๋ค์์ ํฌ์คํธ ๋๋ ๋ชจ๋ axios ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ฃผ์ ๋จ๊ณ์ ๋๋ค. ๋ํ ์ฌ์ฉ์๊ฐ ๋ค์ ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ผ๋ก ๋ฌธ์ ๋ฅผ ์ด โโ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๋์ค์ ๋ฌธ์ ํ ํ๋ฆฟ์ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.
config.params
๋๋ config.data
์ฌ์ฉํด์ผ ํฉ๋๊น?params
์ธ ๊ฒฝ์ฐ ์ธ์ฝ๋ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์
๋๊น? ๊ธฐ๋ณธ config.paramsSerializer
์ด๋ฉด ์ถฉ๋ถํฉ๋๊น ์๋๋ฉด ์ฌ์ฉ์ ์ ์๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๊น?data
์ธ ๊ฒฝ์ฐ ์ฌ๋ฐ๋ฅธ content-type
ํค๋๋ก ์ธ์ฝ๋ฉํ์ต๋๊น? ๋๋ถ๋ถ์ ๊ฒ์๋ฌผ ๋ฌธ์ ๋ ์ฌ๊ธฐ์์ ์คํจํ์ต๋๋ค.application/json
ํค๋์๋ JSON.stringify
$ ๊ฐ ํ์ํ๊ณ application/x-www-form-urlencoded
ํค๋์๋ qs.stringify
$ ๊ฐ ํ์ํฉ๋๋ค.config.transformRequest
๋ URLSearchParams์ ๋ํด application/x-www-form-urlencoded
๋ฅผ ์ค์ ํ๊ณ Javascript ๊ฐ์ฒด์ ๋ํด application/json
๋ฅผ ์ค์ ํฉ๋๋ค. ์ ํํ ์ดํด๋ฅผ ์ํด lib/defaults.js
์ ์์ค ์ฝ๋๋ฅผ ํ์ธํ์ญ์์ค.๋๋ ๊ทธ๊ฒ๋ค์ด ๋ณต์กํด ๋ณด์ธ๋ค๋ ๊ฒ์ ์๊ณ ์์ผ๋ฉฐ ๊ฐ๋ฅํ ํ ์์ธํ๊ฒ ์ค๋ช ํ๋ ํํ ๋ฆฌ์ผ์ ์์ฑํ ๊ณํ์ ๋๋ค. ํ์ง๋ง ๋๋ ์์ด๋ฏผ์ด ์๋๋ผ ๋ด ๊ธฐ์ฌ ์์ค์ด ์กฐ๊ธ ๊ฑฑ์ ๋ฉ๋๋ค. ์ ๊ทธ๋ ๊ฒ์ ์ฉ์ํ๊ณ ์ปค๋ฎค๋ํฐ์ ๋๊ตฐ๊ฐ๊ฐ ์ ์์ฑ๋ ๋ฌธ์๋ฅผ ์ ๊ณตํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ญ์์ค. ์ด๊ฒ์ ์คํ ์์ค์ ๋๋ค. ์ฐ๋ฆฌ๋ ๋ชจ๋์ ๊ธฐ์ฌ๊ฐ ํ์ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ์ต๊ทผ AJAX ์์ ์ jQuery๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์์ Axios๋ก ์ฎ๊ธฐ๊ธฐ ์์ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ๊ฐ๋จํ POST๋ฅผ ํ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์ถฉ๊ฒฉ์ ๋ฐ์์ต๋๋ค.
๊ทธ๋์ ์ฒ์ ์๋ํ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฐฑ์๋(PHP ์ฌ์ฉ)์์ $_POST๋ ์์ ํ ๋น์ด ์์ต๋๋ค. ๊ทธ๋์ ๋๋ ์ฝ๊ฐ์ ์ธํฐ๋ท ๊ฒ์์ํ๊ณ ์ด๊ฒ์ ์๋ํฉ๋๋ค (ํด๋ฆฌํ ์ฌ์ฉ, ํ์จ).
์ด๊ฒ์ ์๋ํฉ๋๋ค. ๊ทธ๋์
URLSearchParams
๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๊น? ๋ฌธ์์์ ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ด ์๋ํด์ผ ํจ์ ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ค๋ง์ค๋ฌ์ ์ต๋๋ค.๋ค๋ฅธ ์ฌ๋์ด์ด ๋ฌธ์ ๊ฐ ์์ต๋๊น?