php接收vue請求數據axios,詳解vue axios用post提交的數據格式

Content-type的幾種常見類型

一、是什么?

是Http的實體首部字段,用于說明請求或返回的消息主體是用何種方式編碼,在request header和response header里都存在。

二、幾個常用類型:

1、application/x-www-form-urlencoded

這應該是最常見的post編碼方式,一般的表單提交默認以此方式提交,$ajax默認提交就是使用這種格式。大部分服務器語言對這種方式都有很好的支持。在PHP中,可以用$_POST[“key”]的方式獲取到key的值,在node中我們可以使用querystring中間件對參數進行分離

1)瀏覽器的原生form表單

2) 提交的數據按照 key1=val1&key2=val2 的方式進行編碼,key和val都進行了URL轉碼

POST [http://www.example.com](http://www.example.com) HTTP/1.1

Content-Type: application/x-[www-form-urlencoded](http://www-form-urlencoded);charset=utf-8

title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3

2、multipart/form-data

這也是一種比較常見的post數據格式,我們用表單上傳文件時,必須使form表單的enctype屬性或者ajax的contentType參數等于multipart/form-data。

Submit

請求頭看起來像這樣

POST /foo HTTP/1.1Content-Length: 68137Content-Type: multipart/form-data; boundary=---------------------------974767299852498929531610575

---------------------------974767299852498929531610575Content-Disposition: form-data; name="description"some text---------------------------974767299852498929531610575Content-Disposition: form-data; name="myFile"; filename="foo.txt"Content-Type: text/plain

(content of the uploaded file foo.txt)---------------------------974767299852498929531610575--

不同字段以--boundary開始,接著是內容描述信息,最后是字段具體內容。如果傳輸的是文件,還要包含文件名和文件類型信息

3、application/json

消息主體是序列化后的 JSON 字符串,這個類型越來越多地被大家所使用,axios默認提交就是使用這種格式。

POST [http://www.example.com](http://www.example.com) HTTP/1.1

Content-Type: application/json;charset=utf-8{"title":"test","sub":[1,2,3]}

這種方案,可以方便的提交復雜的結構化數據,特別適合 RESTful 的接口。各大抓包工具如 Chrome 自帶的開發者工具、Firebug、Fiddler,都會以樹形結構展示 JSON 數據,非常友好。

4、text/xml

是一種使用 HTTP 作為傳輸協議,XML 作為編碼方式的遠程調用規范

POST [http://www.example.com](http://www.example.com) HTTP/1.1

Content-Type: text/xml

examples.getStateName

41

三、axios 將post請求數據轉為formdata

1、后臺改變接收參數的方法

vue組件中,axios發送post請求的代碼如下:

this.$axios({

method:"post",

url:"/api/haveUser",

data:{

name:this.name,

password:this.password

}

}).then((res)=>{

console.log(res.data);

})

此時控制臺Network Headers里面的信息是這樣子的

后臺接收數據需要依賴body-parser中間件,我們事先裝好,接著在后臺代碼中引用body-parser

這張截圖中,發揮作用的代碼僅僅是const bodyParser=require("body-parser");

接下來在路由中使用body-parser

app.post("/api/haveUser",bodyParser.json(),function(req,res){

console.log(req.body);

let haveUser=require("../api/server/user.js");

haveUser(req.body.name,req.body.password,res);

});

這時,當前臺發送post請求之后,后臺控制臺中就會打印出req.body

這時,通過req.body.name或者req.body.password就能拿到對應的值。這種方法比較簡單,也不需要前臺做過多修改。

2、其中發揮關鍵作用的是headers與transformRequest。其中?headers?是設置即將被發送的自定義請求頭。?transformRequest?允許在向服務器發送前,修改請求數據。這樣操作之后,后臺querystring.parse(decodeURIComponent(data))獲取到的就是類似于{ name: 'w', password: 'w' }的對象。代碼如下:

axios({

url:'/api/index/getIndexlbt',

method:'post',

data: {

relevanceId:this.$route.params.id,

pictureType:4},

transformRequest: [function (data) {

let ret= ''

for (let it indata) {

ret+= encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'}returnret

}],

headers: {'Content-Type': 'application/x-www-form-urlencoded'}

})

3、使用qs庫編碼數據

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);

4、axios配置后,post提交formdata

var fd = newFormData()

fd.append('file', files[0])

let config={

headers: {'Content-Type': 'multipart/form-data'}

}

axios.post(that.uploadUrl, fd,config).then( res=>{

console.log(res)

}).catch( res =>{

console.log(res)

})

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453382.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453382.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453382.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構中的邏輯結構簡介

數據的邏輯結構是對數據之間關系的描述,有時就把邏輯結構簡稱為數據結構。邏輯結構形式地定義為(K,R)(或(D,S)),其中,K是數據元素的有限集&#x…

applicationContext配置文件模板1

<?xml version"1.0" encoding"utf-8"?> <beans      --整個配置文件的根節點&#xff0c;包含一個或多個bean元素 xmlns    --最基本的命名空間定義 xmlns:xsi  --最基本的命名空間定義 xmlns:context  --啟動自動掃描或注解裝配…

時間復雜度的一些計算規則

一些規則(引自&#xff1a;時間復雜度計算 ) 1) 加法規則 T(n,m) T1(n) T2(n) O (max ( f(n),g(m) ) 2) 乘法規則 T(n,m) T1(n) * T2(m) O (f(n) * g(m)) 3) 一個特例&#xff08;問題規模為常量的時間復雜度&#xff09; 在大O表示法里面有一個特例&#xff0c;如…

職場新人面試誤區:我的技術好,所以你必須要請我?

這個是論壇的一個帖子。 前幾天有家軟件公司聯系到我&#xff0c;去之前電話里跟他們的項目經理聊了兩句&#xff0c;什么都明白了就沒去面試 是老板先給我打的電話&#xff0c;問我做J2EE多久了&#xff0c;期望薪水什么個范圍。。。 然后老板說&#xff0c;你稍等&#xff…

Oracle 基礎

為什么80%的碼農都做不了架構師&#xff1f;>>> Oracle DB筆錄&#xff0c;以后會不斷Add&#xff0c;歡迎留言補充! --cmd.exe(你懂得!) --[1]多個數據庫實例&#xff0c;切換選擇DB后&#xff0c;登錄操作 set ORACLE_SIDorcl --選擇DB orcl(你的DB實例名) --可在…

Linux執行命令提示Password,linux expect遠程自動登錄以及執行命令

linux遠程自動登錄以及執行命令遠程登錄該自動登錄的過程是通過shell里面expect實現的&#xff0c;類似相當于開了一個類似于cmd的命令段輸出IP和密碼。注意該腳本能夠執行的前提是安裝了expectyum install -y expect直接上腳本&#xff1a;#!/usr/bin/expect …

雙塔

## 雙塔 題目描述 有n個數字&#xff0c;要求將這n個數字分成兩部分&#xff08;兩部分可以數字個數不同&#xff09;&#xff0c;使得兩部分數字之和的差最小 輸入輸出格式 輸入&#xff1a; 第一行為n 第二行有n個數&#xff0c;即題目中所描述那樣 輸出&#xff1a; 兩部分和…

時間復雜度計算雜記

算法時間復雜度的計算 [整理] 時間復雜度算法 基本的計算步驟 時間復雜度的定義 一般情況下&#xff0c;算法中基本操作重復執行的次數是問題規模n的某個函數&#xff0c;用T(n)表示&#xff0c;若有某個輔助函數f(n)&#xff0c;使得當n趨近于無窮大時&#xff0c;T(n)/f(n…

MyBatis 在xml文件中處理大于號小于號的方法

為什么80%的碼農都做不了架構師&#xff1f;>>> 第一種方法&#xff1a;用轉義字符&#xff08;注&#xff1a;對大小寫敏感&#xff01; &#xff09; 用了轉義字符把>和<替換掉&#xff0c;然后就沒有問題了。 SELECT * FROM test WHERE 1 1 AND start_da…

linux 進程間讀寫鎖,Linux系統編程—進程間同步

我們知道&#xff0c;線程間同步有多種方式&#xff0c;比如&#xff1a;信號量、互斥量、讀寫鎖&#xff0c;等等。那進程間如何實現同步呢&#xff1f;本文介紹兩種方式&#xff1a;互斥量和文件鎖。##互斥量mutex我們已經知道了互斥量可以用于在線程間同步&#xff0c;但實際…

程序員:開汽車,難道我要知道汽車的原理才能把車開好嗎?

一個網友的迷惑&#xff1a; 我工作&#xff15;年了&#xff0c;一直做&#xff2a;&#xff12;&#xff25;&#xff25;的項目&#xff0c;前幾天去面試&#xff0c;一個人問我JDBC有幾種連接方式&#xff0c;這個問題這么多年以來我從來沒有遇見過&#xff0c;不知道大家 …

杭州某知名xxxx公司急招大量java以及大數據開發工程師

因公司戰略以及業務拓展&#xff0c;收大量java攻城獅以及大數據開發攻城獅. 職位信息&#xff1a; java攻城獅: https://job.cnblogs.com/offer/56032 大數據開發攻城獅: https://job.cnblogs.com/offer/56033 歡迎博客園的XDJM自薦和推薦&#xff01; 此招聘長期有效 歡迎留言…

35.6. /etc/dnsmasq.d/dnsmasq.address.conf

vim /etc/dnsmasq.d/dnsmasq.address.confaddress/www.mydomain.com/172.16.0.254deny domain address/www.facebook.com/127.0.0.1 address/www.google.com/127.0.0.135.6.1. 域名劫持 將域名解析到錯誤的地址&#xff0c;這樣可以屏蔽一些網站。 address/www.facebook.com/12…

請求地址操作中的(int*)

例如 float b3.14,*a&b; int *p(int *)a; 表示將指針a的類型轉換為整型指針再賦給p。

linux初始化內存盤卡住,Linux系統內存磁盤初始化技術詳細解析

轉自&#xff1a;http://m.zol.com.cn/article/1271270.html?viaindexLinux內存初始化技術(initrd)用于支持兩階段的系統引導過程&#xff0c;是在系統啟動過程中被掛載的臨時root文件系統(譯者注&#xff1a;這里的root文件系統是指的根文件系統)。initrd包含很多可執行程序和…

程序員是程序中的臨時變量,用完扔掉?

今天看到某人從墳墓里刨出的文章&#xff0c;挺有意思的。 程序員&#xff0c;到了一定年齡&#xff0c;如果沒有機會轉到領導級&#xff0c;至少是項目經理&#xff0c;能獨立領導團隊完成項目&#xff0c;還是停留在編碼的層次&#xff0c;那么被迫離開的危險會是很高的&…

屬性依賴注入

1.依賴注入方法 手動裝配和自動裝配 2.手動裝配 2.1 基于xml裝配 2.1.1 構造方法 <!-- 構造方法注入<constructor-arg>name:參數名type:類型value: --> <bean id"user" class"g_xml.constructor.User"><constructor-arg name"id…

windows下實現自己的第一個python腳本文件并.exe運行

前言 python可以做很多事情&#xff0c;比如知乎上的回答&#xff0c;每天來到公司都要打開AS&#xff0c; QQ和微信,為了省事決定用python寫一個簡單的腳本來實現。。腳本內容只有幾行,python的代碼真的好簡潔。。。 import os os.startfile("C:\Program Files (x86)\Ten…

C++中引用()基礎認識

對于習慣使用C進行開發的朋友們&#xff0c;在看到c中出現的&符號&#xff0c;可能會犯迷糊&#xff0c;因為在C語言中這個符號表示了取地址符&#xff0c;但是在C中它卻有著不同的用途&#xff0c;掌握C的&符號&#xff0c;是提高代碼執行效率和增強代碼質量的一個很好…

linux無法訪問443端口,linux – 為什么我無法在Ubuntu上ping端口443?

我通過iptables打開了端口443&#xff1a;pkts bytes target prot opt in out source destination45 2428 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/06 1009 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80141 10788 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:220 0 AC…