日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php接收vue请求数据axios,详解vue axios用post提交的数据格式

發布時間:2023/12/20 php 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)

})

總結

以上是生活随笔為你收集整理的php接收vue请求数据axios,详解vue axios用post提交的数据格式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。