.vue在调用method为delete时,出现了无法传参的情况
1.vue在调用method为delete时,出现了无法传参的情况:
调用delete api发现想传入的json格式的参数并没有传入成功,如下:
这其实是vue的delete方法和其他post put get方法不一样导致的,需要修改delete传参格式就行了:
Vue中 axios delete请求参数踩坑:
vue中axios 的delete和post,put在传值上有点区别:
post和put有三个参数,url,data和config,所以在使用这两个时,可以写成axios.post(api,{id:1}),axios.put(api,{id:1}),但是delete只有两个参数:url和config,data在config中,所以需要写成 axios.delete(api,{data:{id:1}})
如果是服务端将参数当作Java对象(比如json格式)来封装接收则 参数格式为:{data: param} var param={id:1,name:'zhangsan'} this.$axios.delete("/ehrReferralObjPro", {data: param}).then(function(response) { }
如果服务端将参数当做url 参数 接收,则格式为:{params: param},这样发送的url将变为http:www.XXX.com?a=…&b=… var param={id:1,name:'zhangsan'} this.$axios.delete("/ehrReferralObjPro", {params: param}).then(function(response) { }
axios 数组传值时,我传到后台的是两个字符串数组,但是将参数当成url参数接收时,如果是正常传值,将数组作为一个请求参数传值时,后台接口接收不到匹配的参数,百度之后使用JSON.stringify(),但是使用以后,后台多了一对双引号,最后把后台改成对象封装接收参数,使用的第一种。
下面罗列了vue各个方法的传参方式:
修改vue框架的apis文件夹(一般都是这个文件夹,也可能是其他文件夹)中的api.js文件: //引入封装好的 axios import Axios from './axios' // 实例化:只有一个api服务器请求地址管理 const instance =Axios() // //vue项目多个不同的服务器请求地址管理 // const instance = Axios.create({ // baseURL: '/releaseapi' // }) // // const externalInstant = Axios.create({ // baseURL: '/externalApis' // }) //创建需要的请求方法:get post put delete //url:请求的接口地址 //params:请求参数 //headers:请求头 export default { //创建需要的请求方法:get post put delete get(url, params, headers) { return instance.get(url, {params, headers}) }, post(url, params, headers) { return instance.post(url, params, {headers}) }, put(url, params, headers) { return instance.put(url, params, {headers}) }, delete(url, params) {// console.log(url) // console.log(params) // console.log(headers) //正确示例:如果是服务端将参数当作Java对象来封装接收则 参数格式为:{data: param} return instance.delete(url, {data: params}) //正确示例:如果服务端将参数当做url 参数 接收,则格式为:{params: param},这样发送的url将变为http:www.XXX.com?a=…&b=… // return instance.delete(url,{params: params})
//错误示例:下面这是一个错误的传参方式,参数无法被正常的传入给api:
//return instance.put(url, params, {headers})
}
}