Axios POST数组数据

29

我想向一个我控制有限的服务器发送POST请求。我唯一知道的是,如果我在Postman中发布以下数据,则可以获得正确的响应。

x-www-form-urlencoded radio button checked

Entered the following 2 array data:
    product_id_list[]          pid1234
    product_id_list[]          pid1235

Header - Content-Type: application/x-www-form-urlencoded

Method: Post

但是当我试着通过axios来实现时,似乎无法正确传递参数数据。我已经尝试过

axios.post('https://test.com/api/get_product,
    querystring.stringify({
      'product_id_list': ['pid1234', 'pid1235']
    }))
.
.
.
axios.post('https://test.com/api/get_product,
    querystring.stringify({
      'product_id_list[]': 'pid1234',
      'product_id_list[]': 'pid1235'
    }))
.
.
.

有人知道如何在axios中翻译这种类型的数组数据吗?

6个回答

21

我也遇到了这个问题,我用 new FormData() 解决了它。

有一个数组:

const product_id_list = ['pid1234', 'pid1235']

const bodyFormData = new FormData();

product_id_list.forEach((item) => {
    bodyFormData.append('product_id_list[]', item);
});

axios.post('https://test.com/api/get_product', bodyFormData)

用这种方式发送请求会将请求作为application/x-www-form-urlencoded类型,并将正确的数据放在请求体中。


14

您可以使用本机的axios创建请求。您可以使用data键传递有效载荷。

import axios from 'axios';

let payload = {
  product_id_list: ['pid1234', 'pid1235']
};

axios({
  url: 'https://test.com/api/get_product',
  method: 'post',
  data: payload
})
.then(function (response) {
    // your action after success
    console.log(response);
})
.catch(function (error) {
   // your action on error success
    console.log(error);
});

你可以在浏览器中此处尝试运行你的 axios 代码。


5

如果服务器支持,您可以使用 'Content-Type': 'application/json' 标头发送您的POST请求。

const productList = [1, 2, 3, 4]

const data = JSON.stringify({product_list: productList})
const config = {
    headers: {'Content-Type': 'application/json'}
}

return axios.post('api/url', data, config)

3
您可以尝试以下方法:
    var payload = {
            product_id_list: [
                'pid1234',
                'pid1235'
              ]
    };

    axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
    payloaxios.post('https://test.com/api/get_product', payload)
      .then(function (response) {
        console.log(response);
    })
    .catch(function (error) {
        console.log(error);
    });

此外,您应该仔细查看axios文档

0

你也可以使用axios中的FormData发送一个对象数组 -

let full_name = this.state.full_name;
let phone_no = this.state.phone_no;
let carts = [
       { product_id: 1, quantity: 10, ...}, 
       { product_id: 2, quantity: 5, ...}, 
     ]
let orderFormData = new FormData();
orderFormData.append('full_name', full_name);
orderFormData.append('phone_no', phone_no);

//Just stringify carts array
orderFormData.append('carts', JSON.stringify(carts));

const headers = {
  'Content-Type' : 'application/json',
  'Accept' : 'application/json',
};

axios.post(url, orderFormData, {headers: headers})
  .then(function (res) {
    console.log(res);
  })
  .catch(function (error) {
    console.log(error)
  })

从后端,您可以通过请求获取它。如果您正在使用Laravel,则可以使用以下代码获取购物车数据 -

json_decode($request->carts);

这将返回与axios发送的确切数组。


-5
        $.ajax({
            type: "POST",
            url: "proceso.php",
            data: {'array': array,'array2': array2},     
            success: function(data){
                console.log(data);
            }
        });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接