欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue-axios-post數(shù)據(jù)后端接不到問題解決

 更新時間:2020年01月09日 11:38:26   作者:Caeser110  
這篇文章主要介紹了Vue-axios-post數(shù)據(jù)后端接不到問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1 前言

最近在前后端聯(lián)調的時候發(fā)現(xiàn)了一個問題,可能自己平時不注意發(fā)送的內容格式,導致解決問題的路上,走了很多彎路,尤其是在剛剛懂了一點Vue知識之后,發(fā)送請求的各種花式寫法也是讓人頭大,我在這把我踩到的坑給大家介紹一下吧。

2 問題

這個問題是我前端登錄的時候向后端發(fā)生post請求。在使用這個接口前,我使用 postman 確認過了幾次,接口傳參是沒有問題的,而且使用params或者body傳參都是能接收到的。然而還是報錯了……我們先來看看一個截圖吧。

我向后端發(fā)參數(shù)的時候無論如何我都接不到數(shù)據(jù),然后我就開始各種懷疑和猜測

( a )后端接口問題
如果是后端接口問題,那么我用postman接到了呀,所以這一條雖然我不信,但是我還是去各種嘗試修改,我修改的接口傳遞方式,我懷疑是不是跨域失敗,然而都沒能解決我的問題。

( b )懷疑跨域未成功
我仔細檢查了是否存在全局代理(各種代理工具)
是否存在nodejs本身問題

( c )發(fā)送參數(shù)問題

我的請求代碼如下:

axios.post('/api/home/login',{
     params: {
      username: this.username,
      password: this.password
     }
    }).then(this.handleLoginSucc)

我自認為沒有問題,但是又不敢確定,于是我又換了一種寫法

// main.js配置
import axios from 'axios'
// 配置請求的根路徑
axios.defaults.baseURL = 'http://localhost:8088/caeser/'
Vue.prototype.$http = axios

// 代碼調用
// 設置同步方法 async
const{ data: res } await this.$http.post('users', { params: this.queryInfo })

然而并不能解決我的問題,因為發(fā)送的內格式依然沒有變化。

最后我找了解決辦法,而且確定了內容格式是formdata

3 解決辦法

3.1 辦法1

var params = new URLSearchParams()
// 參數(shù)保存
params.append('username', this.loginForm.username)
params.append('password', this.loginForm.password)
// post發(fā)送
axios.post('/api/home/login', params).then(this.handleLoginSucc)

這次我就能接到了,我們看看內容格式是什么

Content-type依然是application/json,但是數(shù)據(jù)格式變成了 Form Data,于是問題迎刃而解了。

這個問題困擾了我兩天,算是吸取一個教訓吧,復習了一下請求方面的知識,算是有所進步了。

3.1.1 兼容性

有個很重要提醒:所有瀏覽器都不支持URLSearchParams,但是有一個polyfill可用(確保polyfill全局環(huán)境)

// 安裝
// npm install url-search-params-polyfill --save

ES2015+

import 'url-search-params-polyfill';

3.2 辦法2

這個辦法我建議使用,因為可以解決兼容性問題
使用qs庫對數(shù)據(jù)進行編碼

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

使用qs庫編碼發(fā)送請求后端也是可以接收到的。

3.3 辦法3

不推薦使用

axios.post(url,{data:{},
 headers:{content-type:'application/x-www-form-unlencoded'}
})

4 Request payload 和 FormData 區(qū)別

FormData和Payload是瀏覽器傳輸給后端接口的兩種內容格式,這兩種方式瀏覽器是通過Content-Type來進行區(qū)分的,如果是 application/x-www-form-urlencoded的話,則為formdata方式,如果是application/json或multipart/form-data的話,則為 request payload

下面內容為后端內容

4.1 后端代碼如何處理這兩種格式

Request payload
對于 Request Payload 請求, 必須加 @RequestBody 才能將請求正文解析到對應的 bean 中,且只能通過 request.getReader() 來獲取請求正文內容

Form Data
無需任何注解,springmvc 會自動使用 MessageConverter 將請求參數(shù)解析到對應的 bean,且通過 request.getParameter(…) 能獲取請求參數(shù)

我自己后端代碼就是因為沒有使用 request.getReader() 來獲取,才出現(xiàn)的問題

上面內容為后端內容

5 復習js和jquery的請求

jquery的請求很方便,格式很清晰

$.ajax({
  url : targeturl,
  type : 'POST',
  data : formData,
  contentType : false,
  processData : false,
  cache : false,
  success : function(data) {
    if (data.success) {
      // success
    } else {
      // error
    }
  }
});

JavaScript

function sendData(data) {
 var XHR = new XMLHttpRequest();
 var urlEncodedData = "";
 var urlEncodedDataPairs = [];
 var name;
 // 將數(shù)據(jù)對象轉換為URL編碼的鍵/值對數(shù)組。
 for(name in data) {
  urlEncodedDataPairs.push(encodeURIComponent(name) + '=' + encodeURIComponent(data[name]));
 }
 urlEncodedData = urlEncodedDataPairs.join('&').replace(/%20/g, '+');
 // 定義成功數(shù)據(jù)提交時發(fā)生的情況
 XHR.addEventListener('load', function(event) {
  //
 });
 // 定義錯誤提示
 XHR.addEventListener('error', function(event) {
  //
 });
 // 建立我們的請求
 XHR.open('POST', 'https://example.com/cors.php');
 // 為表單數(shù)據(jù)POST請求添加所需的HTTP頭
 XHR.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
 // 最后,發(fā)送我們的數(shù)據(jù)。
 XHR.send(urlEncodedData);
}

6 Axios知識點

6.1 全局默認值

axios.defaults.baseURL = 'https://caeser.com';
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

6.2 攔截器

//添加請求攔截器
axios.interceptors.request.use(function(config){
   // before success
   // must return config
   // 必須返回config
   return config;
  }, function(error){
   // error
  })
 
//添加響應攔截器
axios.interceptors.response.use(function(response){
   // 
   return response;
  },function(error){
   // error
  });

或者自定義實體

var instance = axios.create();
instance.interceptors.request.use(function () {/*...*/});

7 總結

在學習vue的過程中是非常容易的,因為vue真的很方便使用,學起來很快,都是模板語法,直接COPY就行了,而且邏輯性很簡單,就是在使用的時候,各種版本和插件要學會調試,多嘗試多使用,而且為了好好寫前端,我都下載了離線的CSS樣式文件,因為很多樣式我都沒背下來,而且很多樣式我都不知道,有很多新的好用的特性,都是值得使用的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • vue移動端實現(xiàn)手指滑動效果

    vue移動端實現(xiàn)手指滑動效果

    這篇文章主要為大家詳細介紹了vue移動端實現(xiàn)手指滑動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • vue 本地環(huán)境判斷方式

    vue 本地環(huán)境判斷方式

    這篇文章主要介紹了vue 本地環(huán)境判斷方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue3項目中的el-carousel 輪播圖的使用

    vue3項目中的el-carousel 輪播圖的使用

    Carousel(走馬燈)是一種常見的前端組件,通常用于展示多個項目(通常是圖片或內容塊)的輪播效果,這篇文章主要介紹了vue3項目中的el-carousel 輪播圖的使用,需要的朋友可以參考下
    2024-02-02
  • Vue組件通信之父傳子與子傳父詳細講解

    Vue組件通信之父傳子與子傳父詳細講解

    這篇文章主要介紹了React中父子組件通信詳解,在父組件中,為子組件添加屬性數(shù)據(jù),即可實現(xiàn)父組件向子組件通信,文章通過圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-10-10
  • vue項目中跳轉到外部鏈接的實例講解

    vue項目中跳轉到外部鏈接的實例講解

    今天小編就為大家分享一篇vue項目中跳轉到外部鏈接的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue內置動態(tài)組件component使用示例小結

    vue內置動態(tài)組件component使用示例小結

    component是vue內置組件,主要作用為動態(tài)渲染組件,這篇文章主要介紹了vue內置動態(tài)組件component使用示例小結,需要的朋友可以參考下
    2024-03-03
  • vue和element上傳圖片以及進行拖拽圖片排序問題

    vue和element上傳圖片以及進行拖拽圖片排序問題

    這篇文章主要介紹了vue和element上傳圖片以及進行拖拽圖片排序問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Vue安裝瀏覽器開發(fā)工具的步驟詳解

    Vue安裝瀏覽器開發(fā)工具的步驟詳解

    這篇文章主要介紹了Vue安裝瀏覽器開發(fā)工具步驟詳解,本文分步驟給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • 基于vuejs實現(xiàn)一個todolist項目

    基于vuejs實現(xiàn)一個todolist項目

    這篇文章主要為大家詳細介紹了基于vuejs實現(xiàn)一個todolist項目,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • vue項目中axios使用詳解

    vue項目中axios使用詳解

    這篇文章主要介紹了vue項目中axios使用方法以及原理介紹,如果你正巧學習這個知識點,那么參考下吧。
    2018-02-02

最新評論