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.mzph.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…