談談axios配置請求頭content-type

来源:https://www.cnblogs.com/dreamcc/archive/2019/04/22/10752604.html
-Advertisement-
Play Games

現在前端開發中需要通過Ajax發送請求獲取後端數據是很普遍的一件事情了,鑒於我平時在擼碼中用的是vue技術棧,今天這裡來談談我們常用的發Ajax請求的一個插件—axios。 現在網上可能發送Ajax請求有很多種插件,每種用法可能略有差異,大家只需挑選一種自己喜歡的即可。畢竟現在還有很多人使用jQue ...


現在前端開發中需要通過Ajax發送請求獲取後端數據是很普遍的一件事情了,鑒於我平時在擼碼中用的是vue技術棧,今天這裡來談談我們常用的發Ajax請求的一個插件—axios。
> 現在網上可能發送Ajax請求有很多種插件,每種用法可能略有差異,大家只需挑選一種自己喜歡的即可。畢竟現在還有很多人使用jQuery,$.ajax用法也是很多了。

開始

因為需要用到axios插件,所以我們現在項目種下載依賴

npm install axios -S

axios雖然是一個插件,但是我們不需要通過Vue.use(axios)來使用,下載完成後,只需在項目中引入即可,至於為什麼大家可以百度看看,或者留言,貌似是因為開發者在封裝axios時,沒有寫install這一步。

使用

比如我們在項目中的myInfo.vue中使用axios,當組件在創建成功後發送Ajax請求得到用戶信息展示在我們面前。先引入,然後在組件生命周期函數created中發請求。

如果需要先請求數據然後根據數據渲染頁面展示在我們面前,通常可以在組件生命周期鉤子created中發送Ajax請求即可,此時組件實例中的屬性和方法可以被調用。

現在到了重點的時刻了~~~

axios 使用 post 發送數據時,預設是直接把 json 放到請求體中提交到後端的。也就是說,我們的 Content-Type 變成了 application/json;charset=utf-8 ,這是axios預設的請求頭content-type類型。但是實際我們後端要求的 'Content-Type': 'application/x-www-form-urlencoded' 為多見,這就與我們不符合。所以很多同學會在這裡犯錯誤,導致請求數據獲取不到。明明自己的請求地址和參數都對了卻得不到數據。

我們現在來說說post請求常見的數據格式(content-type)

  1. Content-Type: application/json : 請求體中的數據會以json字元串的形式發送到後端
  2. Content-Type: application/x-www-form-urlencoded:請求體中的數據會以普通表單形式(鍵值對)發送到後端
  3. Content-Type: multipart/form-data: 它會將請求體的數據處理為一條消息,以標簽為單元,用分隔符分開。既可以上傳鍵值對,也可以上傳文件。

我們熟悉了常見的請求數據格式之後,現在我們來解決剛纔遇到的問題: 後端需要接受的數據類型為:application/x-www-form-urlencoded,我們前端該如何配置:

常見方法彙總:

  1. 【用 URLSearchParams 傳遞參數】代碼簡單,省事
let param = new URLSearchParams()
param.append('username', 'admin')
param.append('pwd', 'admin')
axios({
    method: 'post',
    url: '/api/lockServer/search',
    data: param
})

可以看到我在項目中採用的就是第一種方法。> 需要註意的是: URLSearchParams 不支持所有的瀏覽器,但是總體的支持情況還是 OK 的,所以優先推薦這種簡單直接的解決方案

  1. 配置axios請求頭中的content-type為指定類型
  2. axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; 或者 {headers:{'Content-Type':'application/x-www-form-urlencoded'}}
  3. 將參數轉換為query參數, 利用qs

引入 qs ,這個庫是 axios 裡面包含的,不需要再下載了。

import Qs from 'qs'
let data = {
    "username": "cc",
    "psd": "123456"
}

axios({
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    method: 'post',
    url: '/api/lockServer/search',
    data: Qs.stringify(data)
})

好了,我們解決了常見的application/x-www-form-urlencoded形式的傳參,那麼對於後面的兩種又是怎樣轉換的呢,且聽我一一道來。

  1. Content-Type: multipart/form-data

對於這種類型的數據,我們常見前端頁面上傳個人圖像,然後點擊保存發送後端修改原始數據。解決辦法下:

        let params = new FormData()
        params.append('file', this.file)
        params.append('id', localStorage.getItem('userID'))
        params.append('userName', this.name)
        params.append('sex', this.sex)
        params.append('mobile', this.phone)
        params.append('email', this.email)
        params.append('qq', this.qq)
        params.append('weChat', this.WeChat)

        axios.post(URL, params, {headers: {'Content-Type': 'multipart/form-data'}}).then(res => {
          if (res.data.code === 0) {
            this.$router.go(-1)
          }
        }).catch(error => {
          alert('更新用戶數據失敗' + error)
        })

可以看到我這裡就是用到了這種方法實現用戶圖像更新效果的~~

  1. Content-Type: application/json

這種是axios預設的請求數據類型,我們只需將參數序列化json字元串進行傳遞即可,無需多餘的配置。

總結

好了,以上基本的axios配置Content-Type的方法就講述到這裡,歡迎大家提出更好的建議和指正其中的錯誤。

同時大家也可以在GitHub上給我分享更多實用的前端知識,歡迎star,哈哈

GitHub 戳這裡


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • babel 7 對於 babel 7, "babel 的官網" 已經介紹得非常詳細了,但有時感覺文檔和實際使用總是差那麼一點東西。 主要包 先來看一下主要的包,babel 7 對於包進行了一些簡化。 "@babel/cli" : 用於執行相應命令 "@babel/core" : 核心包,將 js 代 ...
  • 1、jQuery.ajax(url[, settings]) 通過HTTP請求載入遠程數據。 註意:所有的settings選擇都可以通過$.ajaxSetup()函數來全局指定。 回調函數 在實際開發中,當我們需要處理$.ajax() 得到的數據,就需要使用到回調函數。 (1) beforeSend ...
  • 這兩天弄一個mui的底部菜單,有點費時了,嘗試了用vue寫,純js寫,還有根據mui的寫,還是有些問題和麻煩。直到看了網上的一些例子,才想明白,之前一直是一種點擊觸發事件才高亮的思維去做,這個雖然可以了,但是頁面跳轉了就又都沒了。網上看明白的例子是:讓當前頁面地址與導航里的地址做對比,相同就高亮,之 ...
  • 上一篇,介紹了 range 對象的一些屬性和方法,瞭解了一些基本操作,現在來介紹另外一個重要的對象:selection 對象; MDN 的解釋是:Selection 對象表示用戶選擇的文本範圍或插入符號的當前位置。它代表頁面中的文本選區,可能橫跨多個元素。文本選區由用戶拖拽滑鼠經過文字而產生; 先來 ...
  • 概要 狹義的 DOM API 僅僅包含 DOM 樹形結構相關的內容。 DOM 中的所有的屬性都是用來表現語義的屬性,CSSOM 的則都是表現的屬性。 CSSOM 是 CSS 的對象模型,在 W3C 標準中,它包含兩個部分: 描述樣式表和規則等 CSS 的模型部分(CSSOM) 跟元素視圖相關的 Vi ...
  • 示例代碼托管在: "http://www.github.com/dashnowords/blogs" 博客園地址: "《大史住在大前端》原創博文目錄" 華為雲社區地址: "【你要的前端打怪升級指南】" [TOC] 經過前面章節相對枯燥的練習,相信你已經能夠上手 的原生API了,那麼從這一節開始,我們 ...
  • 1 顯示和隱藏 1、show([speed,[easing],[fn]]) 顯示隱藏的匹配元素。 參數: (1) spend:三種預定速度之一的字元串('show','normal','fast')或表示動畫時長的毫秒數值 (2) easing:用來指定切換效果,預設為swing,可用參數linea ...
  • 最近在學習微信小程式的開發,讓我吐槽的是,都9102年了,怎麼還是有有時不能複製,有時不能打中文的bug呢,這個時候,你可以Ctrl+shift+w一下,如果還不行,那就得重啟了。。 進入正題吧,剛在寫代碼的時候,報了這樣一個錯誤 然後把this輸一下是undefined,因為這個時候this指向的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...