axios異步提交表單數據的不同形式


踩坑Axios提交form表單幾種格式

前后端分離的開發前后端, 前端使用的vue,后端的安全模塊使用的SpringSecurity,使用postman測試后端的權限接口時發現都正常,但是使用vue+axios發送異步的請求后端一直獲取不出axios提交的form表單的數據,爬坑兩個半鍾頭找到了答案

axios用post異步形式提交的數據和我們直接使用from表單提交的數據的格式(Form Data格式)是不一樣的,在下面列舉

默認格式Request Payload

直接使用axios發送異步請求,沒任何處理的代碼如下:


const service = axios.create({})

doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data: pojo
    })

這種方式提交的表單格式是默認是RequestPayload, 它的長下面這個樣子

可以看到,它的Contet-type是 "Content-Type": "application/json;"
但是后台的SpringSecurity對這種結果可不買單,在Request中解析不出任何數據來

處理成Form Data格式

使用插件qs, 安裝命令如下:

npm install --save qs

請求編碼:


const service = axios.create({})

  doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
       data: qs.stringify(pojo)
    })
  }
  
  或者
  
  doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data: pojo ,
       transformRequest: [function (data) {
        data = qs.stringify(data);
        return data;
      }],
    })
  }

經過這樣處理的表單數據長成下面的這樣, 這也是我們最常用的Form Data格式,這種格式的數據可以從后台的HttpRequest中把提交的屬性解析出來


其他類型的Content-Type對應的表單數據格式

const service = axios.create({
  headers: {
      "Content-Type": "multipart/form-data;  charset=utf-8;"
      }
})

 doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data: qs.stringify(pojo)
       })
  }

它長這樣



const service = axios.create({
  headers: {
      "Content-Type": "multipart/form-data;  charset=utf-8;"
      }
})

 doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data: pojo
       })
  }
---

const service = axios.create({
  headers: {
      "Content-Type": "multipart/form-data;  charset=utf-8;"
      }
})

 doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data:pojo
       })
  }


const service = axios.create({
  headers: {
      "Content-Type": "application/x-www-form-urlencoded; charset=utf-8;"
  }
})

  doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data: qs.stringify(pojo)
    })
  }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM