axios post request to send form data

后端 未结 9 2284
走了就别回头了
走了就别回头了 2020-11-22 03:40

axios POST request is hitting the url on the controller but setting null values to my POJO class, when I go through developer tools in chrome, the payload conta

相关标签:
9条回答
  • 2020-11-22 03:55

    In my case I had to add the boundary to the header like the following:

    const form = new FormData();
        formData.append(item.name, fs.createReadStream(pathToFile));
    
        const response = await axios({
            method: 'post',
            url: 'http://www.yourserver.com/upload',
            data: form,
            headers: {
            'content-type': `multipart/form-data; boundary=${form._boundary}`,
            },
        });
    

    This solution is also useful if you're working with React Native.

    0 讨论(0)
  • 2020-11-22 03:56
    import axios from "axios";
    import qs from "qs";   
    
    const url = "https://yourapplicationbaseurl/api/user/authenticate";
        let data = {
          Email: "testuser@gmail.com",
          Password: "Admin@123"
        };
        let options = {
          method: "POST",
          headers: { "content-type": "application/x-www-form-urlencoded" },
          data: qs.stringify(data),
          url
        };
        axios(options)
          .then(res => {
            console.log("yeh we have", res.data);
          })
          .catch(er => {
            console.log("no data sorry ", er);
          });
      };
    
    0 讨论(0)
  • 2020-11-22 03:58

    Using application/x-www-form-urlencoded format in axios

    By default, axios serializes JavaScript objects to JSON. To send data in the application/x-www-form-urlencoded format instead, you can use one of the following options.

    Browser

    In a browser, you can use the URLSearchParams API as follows:

    const params = new URLSearchParams();

    params.append('param1', 'value1');

    params.append('param2', 'value2');

    axios.post('/foo', params);

    Note that URLSearchParams is not supported by all browsers (see caniuse.com), but there is a polyfill available (make sure to polyfill the global environment).

    Alternatively, you can encode data using the qs library:

    const qs = require('qs');

    axios.post('/foo', qs.stringify({ 'bar': 123 }));

    Or in another way (ES6),

    import qs from 'qs';

    const data = { 'bar': 123 };

    const options = {

    method: 'POST',

    headers: { 'content-type': 'application/x-www-form-urlencoded' },

    data: qs.stringify(data),

    url, };

    axios(options);

    0 讨论(0)
  • 2020-11-22 03:58

    The above method worked for me but since it was something I needed often, I used a basic method for flat object. Note, I was also using Vue and not REACT

    packageData: (data) => {
      const form = new FormData()
      for ( const key in data ) {
        form.append(key, data[key]);
      }
      return form
    }
    

    Which worked for me until I ran into more complex data structures with nested objects and files which then let to the following

    packageData: (obj, form, namespace) => {
      for(const property in obj) {
        // if form is passed in through recursion assign otherwise create new
        const formData = form || new FormData()
        let formKey
    
        if(obj.hasOwnProperty(property)) {
          if(namespace) {
            formKey = namespace + '[' + property + ']';
          } else {
            formKey = property;
          }
    
          // if the property is an object, but not a File, use recursion.
          if(typeof obj[property] === 'object' && !(obj[property] instanceof File)) {
            packageData(obj[property], formData, property);
          } else {
            // if it's a string or a File
          formData.append(formKey, obj[property]);
          }
        }
      }
      return formData;
    }
    
    0 讨论(0)
  • 2020-11-22 03:59

    2020 ES6 way of doing

    Having the form in html I binded in data like so:

    DATA:

    form: {
       name: 'Joan Cap de porc',
       email: 'fake@email.com',
       phone: 2323,
       query: 'cap d\ou'
       file: null,
       legal: false
    },
    

    onSubmit:

    async submitForm() {
      const formData = new FormData()
      Object.keys(this.form).forEach((key) => {
        formData.append(key, this.form[key])
      })
    
      try {
        await this.$axios.post('/ajax/contact/contact-us', formData)
        this.$emit('formSent')
      } catch (err) {
        this.errors.push('form_error')
      }
    }
    
    0 讨论(0)
  • 2020-11-22 04:01

    Even More straightforward:

    axios.post('/addUser',{
        userName: 'Fred',
        userEmail: 'Flintstone@gmail.com'
    })
    .then(function (response) {
        console.log(response);
    })
    .catch(function (error) {
        console.log(error);
    });
    
    0 讨论(0)
提交回复
热议问题