笔记_axios提交form data

本文介绍如何使用Axios结合qs库解决前端向后端提交FormData格式数据的问题,通过配置请求头和序列化参数,确保后端能正确解析数据。

axios默认将数据提交至后端InputStream中,由于历史遗留问题,部分接口使用取form 中的数据,导致前端提交后端获取不到,直接用AJAX可以解决这个问题,但一个页面中两种方式emmmm。。。 。。。  所以有了下面的故事。。。 。。。

1、配置请求头信息

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

参数若默认为js对象会被序列化为js字符串,提交到后端数据是在form中但格式不对无法解析

2、引入qs

npm i qs

3、参数序列化

Qs.stringify(args)

完整样例:

axios.post(url, Qs.stringify(args), {
      headers: {'Content-Type':'application/x-www-form-urlencoded'}     
}).then(callbak).catch((err) => {
      layerPage.complete();
      window_alert(err.message);
});

 

其实ajxa更方便,各人喜好吧

$.ajax({
    url: url,
    data: args,
    type: "POST",
    cache: false,
    success: callbak,
    error: (err) => {
        window_alert(err);
    }
});

axios,发送网络请求 在vue项目中安装axios,命令行输入(npm install axios)/npm install axios vue-axios 注册axios对象,只需要注册一次 创建axios目录,创建js文件,配置axios,导入vue、axios和vue-axio,通过use加载到vue中 例: // axios整合到vue中,方便以后在组件中就可以直接使用 import Vue from 'vue' import axios from 'axios' import VueAxios from 'vue-axios' // axios加载到vue中,加载axios模块 Vue.use(axios,VueAxios) 在main.js中引入js文件,挂载到vue对象中 例: //引入js脚本 import axios from './axios/index.js' 例: new Vue({ //挂载 axios }) 使用 Vue.axios.请求方式 Vue.axios.请求方式 请求方式,axios支持链式语法 this.axios.get(地址); this.axios.post(地址); this.axios.put(地址); this.axios.delete(地址); 子主题 5 this.axios() 语法: this.axios({ }) 属性 url:请求的地址 method:请求的方式 baseURL,可定义请求地址,和参数相加即可 reponseType:返回的格式 data:向主体发送的参数 子主题 6 子主题 7 Vue.$http.请求方式 注意: data和params的区别,data传递的为参数,?参数=值&参数=值,而params传递的参数为/参数=值/参数=值/参数=值 params传值 直接在axios中定义params属性,里面为键值对的形式,请求时会在地址后拼接属性 例: this.axios({ url : baseURL, method : 'GET', reponseType : 'json', params:{ nname : '1', cid : '3' } }).then(function(re){ console.log(re.data); }) data传值 请求为POST时,data中的值就无法传入后端,因为axios默认传值的数据格式为Request Payload,不是我们常用的Form Dataaxios默认将值作为json形式发送,我们要以键值对的形式进行发送,当格式为Request Payload,不会读取请求体中的数据和相应的参数处理 Request Payload参数为json格式 例:{id:1,name:1} Form Data,以&符拼接 例:id=1&name=1 解决的方式 创建URLSearchParams参数处理对象,用于返回新的URLSearchParams对象,将添加的键值对转为一个url参数的字符串 var data2 = new URLSearchParams(); data2.append("nname","1"); data2.append("cid","3"); this.axios.post(baseURL,data2).then(function(re){ console.log(re.data) }) 创建FormData对象,通过append()追加数据,将键值对进行组合 FormData主要用于表单元素的name和value进行组合,以及异步上传文件 使用 var data3 = new FormData(); data3.append("nname","w"); data3.append("cid","3"); this.axios.post(baseURL,data3).then(function(re){ console.log(re.data) }) 使用qs插件将对象序列化form data 安装qs插件 main.js中导入qs,然后安装qs import qs from 'qs' Vue.use(qs) 所用组件中导入qs import qs from 'qs' 使用qs将对象序列化为一个url地址参数的字符串 var params = { nname : '1', cid : '3' } var data = qs.stringify(params); 请求 this.axios.post(baseURL,data).then(function(re){ console.log(re.data) }) 修改请求头的Content-Type方式 在axios中加入 headers:{ "Content-Type":"application/x-www-form-urlencoded" } transformRequest允许在请求之前修改请求数据,只能用在PUT、POST和PATCH请求的方式 this.axios({ url : baseURL, method : 'POST', reponseType : 'json', headers:{ "Content-Type":"application/x-www-form-urlencoded" }, data:{ "nname":"w", "cid":"3" }, transformRequest:[function(data){ var n = new FormData(); n.append("nname","1"); n.append("cid","3"); return n; }] }).then(function(re){ console.log(re.data); }) 状态码 1开头 2开头,证明请求成功 3开头,重定向问题 4开头,客户端错误 5开头,服务台报错 子主题 3 子主题 4 子主题 5 子主题 5 子主题 4 子主题 5 这是我的笔记内容我需要重新学习Vue的axios请求,你给我写一个例子要求基于脚手架来做,涉及多个层面,比如请求方式的封装,前置和后置拦截器,多请求的编写语法注意
09-27
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值