Axios: axios์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ POSTํ•  ์ˆ˜ ์—†์Œ

์— ๋งŒ๋“  2017๋…„ 11์›” 21์ผ  ยท  62์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: axios/axios

์ด ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Web API์— ๋ฐ์ดํ„ฐ๋ฅผ POSTํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋ณ€์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜ = {
์ธ์ˆ˜: {
myStringVal: '979251e4-6c9f-460d-ba32-1b6fe58ce8a3'
}
};

์•ก์‹œ์˜ค์Šค({
๋ฐฉ๋ฒ•: '๊ฒŒ์‹œ',
URL: 'api/์‘์šฉ ํ”„๋กœ๊ทธ๋žจ/์•ก์…˜/MyWebAPI ๋ฐฉ๋ฒ•',
๋ฐ์ดํ„ฐ: JSON.stringify(๋งค๊ฐœ๋ณ€์ˆ˜),
});

๋‚ด ์›น API ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ณต๊ฐœ ํด๋ž˜์Šค MyClassVM
{
๊ณต๊ฐœ ๋ฌธ์ž์—ด myStringVal { get; ์„ธํŠธ; }
}
๊ณต๊ฐœ MessageVMMyWebAPIMethod(MyClassVM ์ธ์ˆ˜){
// ๋‚ด ์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์— ๊ฐ„๋‹ค
}

๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. myStringVal: '979251e4-6c9f-460d-ba32-1b6fe58ce8a3'์„ ์ „๋‹ฌํ•˜๋ฉด Web API [args.myStringVal = null ]์— null์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

axios 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 ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋ฌธ์„œ์—์„œ ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์ด ์ž‘๋™ํ•ด์•ผ ํ•จ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ์‹ค๋ง์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  62 ๋Œ“๊ธ€

@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๊ฐ€์ง€ ๋ณ€ํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘๋™ํ•˜๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. ์–‘์‹ ๋ฐ์ดํ„ฐ
  2. URL๊ฒ€์ƒ‰ ๋งค๊ฐœ๋ณ€์ˆ˜
  3. querystring.stringify(๋…ธ๋“œ์˜ ์ผ๋ถ€)

์ฒ˜์Œ 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 });

๋ฉฐ์น  ํ›„ ์ด์ „ ์˜ต์…˜์„ ๋ชจ๋‘ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Axios 'post' ๋ฐฉ๋ฒ•์€ ๋ฌธ์„œํ™”๋œ ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • Axios๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ REST ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ 'ํฌ์ŠคํŠธ' ํ˜ธ์ถœ์„ ์‹คํ–‰ํ•˜๋ฉด ์ง€์˜ฅ์ด ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์‹ฌ๊ฐํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ฏฟ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค ... ์ฃ„์†กํ•˜์ง€๋งŒ ๋‹ค๋ฅธ API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋Œ์•„์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ตฟ๋ฐ”์ด ์•ก์‹œ์˜ค์Šค.

@fabriciobraga ๋‚ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋„ ์™œ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ์•Œ์•„ ๋‚ด๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ•˜๋ฃจ ์ข…์ผ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ธํ„ฐ๋„ท์„ ๋’ค์กŒ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์•Œ๊ณ ๋ณด๋‹ˆ ์•„์ฃผ ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. ๋‚ด ์‚ฌ์šฉ์ž create action ์ฒ˜์Œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

createUser(context, user) {
    this.$axios.$post("/api/users/", user).then(response => {
      context.dispatch("fetchUsers");
    });
 }

user ๋งค๊ฐœ๋ณ€์ˆ˜์—๋Š” ์ƒˆ ์‚ฌ์šฉ์ž์˜ email ๋ฐ password ๊ฐ€ ํฌํ•จ๋œ ๊ฐœ์ฒด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. console.log ์‚ฌ์šฉ์ž ๊ฐœ์ฒด๋ฅผ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ์†์„ฑ์ด ์ •์˜๋˜์ง€ ์•Š์•˜๋‹ค๊ณ  ๋ณด๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค! ๐Ÿค”

Screen Shot 2020-01-27 at 10 00 04 PM

๊ทธ๋ž˜์„œ $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 ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ฃผ์š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์Œ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์œผ๋กœ ๋ฌธ์ œ๋ฅผ ์—ด โ€‹โ€‹์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋ฌธ์ œ ํ…œํ”Œ๋ฆฟ์„ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์–ด๋Š ์ชฝ์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๊นŒ? ๋ธŒ๋ผ์šฐ์ € ๋˜๋Š” ์„œ๋ฒ„ ์ธก.
  2. ์–ด๋–ค ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ณด๋‚ด์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? config.params ๋˜๋Š” config.data ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?
  3. params ์ธ ๊ฒฝ์šฐ ์ธ์ฝ”๋”ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ธฐ๋ณธ config.paramsSerializer ์ด๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ์‚ฌ์šฉ์ž ์ •์˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?
  4. data ์ธ ๊ฒฝ์šฐ ์˜ฌ๋ฐ”๋ฅธ content-type ํ—ค๋”๋กœ ์ธ์ฝ”๋”ฉํ–ˆ์Šต๋‹ˆ๊นŒ? ๋Œ€๋ถ€๋ถ„์˜ ๊ฒŒ์‹œ๋ฌผ ๋ฌธ์ œ๋Š” ์—ฌ๊ธฐ์—์„œ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.

    1. application/json ํ—ค๋”์—๋Š” JSON.stringify $ ๊ฐ€ ํ•„์š”ํ•˜๊ณ  application/x-www-form-urlencoded ํ—ค๋”์—๋Š” qs.stringify $ ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

    2. ๊ธฐ๋ณธ config.transformRequest ๋Š” URLSearchParams์— ๋Œ€ํ•ด application/x-www-form-urlencoded ๋ฅผ ์„ค์ •ํ•˜๊ณ  Javascript ๊ฐœ์ฒด์— ๋Œ€ํ•ด application/json ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ์ดํ•ด๋ฅผ ์œ„ํ•ด lib/defaults.js ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

  5. CORS/ATS/Promise์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ๋งŒ๋‚ฌ๊ณ  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ๊ทธ๊ฒƒ๋“ค์ด ๋ณต์žกํ•ด ๋ณด์ธ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ ๊ฐ€๋Šฅํ•œ ํ•œ ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋Š” ํŠœํ† ๋ฆฌ์–ผ์„ ์ž‘์„ฑํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜๋Š” ์›์–ด๋ฏผ์ด ์•„๋‹ˆ๋ผ ๋‚ด ๊ธฐ์‚ฌ ์ˆ˜์ค€์ด ์กฐ๊ธˆ ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค. ์ž ๊ทธ๋Š” ๊ฒƒ์„ ์šฉ์„œํ•˜๊ณ  ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ž˜ ์ž‘์„ฑ๋œ ๋ฌธ์„œ๋ฅผ ์ œ๊ณตํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์€ ์˜คํ”ˆ ์†Œ์Šค์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ชจ๋‘์˜ ๊ธฐ์—ฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰