Vue中axiosdelete请求参数操作
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对象来封装接收则参数格式为:
{data: param}
var param={id:1,name:'zhangsan'}
this.$axios.delete("/ehrReferralObjPro", {data: param}).then(function(response) {
}
如果服务端将参数当做url 参数接收,则格式为:{params: param},这样发送的url将变为http:www.XXX?a=…&b=…
var param={id:1,name:'zhangsan'}
this.$axios.delete("/ehrReferralObjPro", {params: param}).then(function(response) {
}
axios 数组传值时,我传到后台的是两个字符串数组,但是将参数当成url参数接收时,如果是正常传值,将数组作为⼀个请求参数传值时,后台接⼝接收不到匹配的参数,百度之后使⽤JSON.stringify(),但是使⽤以后,后台多了⼀对双引号,最后把后台改成对象封装接收参数,使⽤的第⼀种。
补充知识:vue 项⽬中的this.$get,this.$post等$的⽤法
vue官⽹上有这么⼀句话
结合案例:
// 基于axios 封装的http请求插件
const axios = require('axios');
/**
* 以下这种⽅式需要调⽤Vue.use⽅法调⽤的时候调⽤ this.$fetch, this.$post, this.$axios, this.$put, this.$del ⽅法
*/
function coverFormData (data) {
return Object.keys(data).map(key => {
let value = data[key];
vue逗号分割的字符串转数组if (typeof value === 'object') {
value = JSON.stringify(value);
}
return encodeURIComponent(key) + '=' + encodeURIComponent(value);
})
}
const http = {
install(Vue, Option) {
axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
if (Option) {
// 超时设置
axios.defaults.timeout = Option.timeout || 10000;
// 默认请求地址设置
axios.defaults.baseURL = Option.baseURL || "";
// 头部设置
if (Option.headers && typeof Option.headers === 'object') {
for (let key in Option.headers) {
if (!Option.headers.hasOwnProperty(key)) continue;
axios.defaults.headers[key] = Option.headers[key];
}
}
// 请求/响应
Option.inRequest && quest.use(Option.inRequest, error => {
});
Option.inResponse && sponse.use(Option.inResponse, error => {
});
}
/**
* @param {string} url
* @param {object} params={} 参数可以根据需要⾃⾏处理
*/
const fetch = (url, params = {}, config = {}) => {
const str = coverFormData(params).join('&');
return new Promise((resolve, reject) => {
let address = url;
if (str) {
address += '?' + str;
}
<(address, config).then(res => {
resolve(res.data);
}).catch(error => {
reject(error);
});
});
};
/**
* @param {string} url
* @param {object} data={} 参数可以根据需要⾃⾏处理
*/
const post = (url, data = {}, config = {}) => {
let str = coverFormData(data).join('&');
if (config.headers && config.headers['Content-Type'] && config.headers['Content-Type'].indexOf('application/json') > -1) { str = JSON.parse(JSON.stringify(data));
}
return new Promise((resolve, reject) => {
axios.post(url, str, config).then(res => {
resolve(res.data);
}).catch(error => {
reject(error);
});
});
};
/**
* @param {string} url
* @param {object} data={} 参数可以根据需要⾃⾏处理
*/
const put = (url, data = {}, config = {}) => {
const str = coverFormData(data).join('&');
return new Promise((resolve, reject) => {
axios.put(url, str, config).then(res => {
resolve(res.data);
}).catch(error => {
reject(error);
});
});
};
/**
* @param {string} url
* @param {object} params={}
*/
const del = (url, config = {}) => {
const str = coverFormData(config).join('&');
return new Promise((resolve, reject) => {
axios.delete(url, str).then(res => {
resolve(res.data);
}).catch(error => {
reject(error);
});
});
};
const data = { axios, fetch, post, put, del };
/
/ 这个地⽅说明了为啥使⽤的时候是this.$fetch, this.$post, this.$axios, this.$put, this.$del 这⼏个⽅式
Object.keys(data).map(item => Object.defineProperty(Vue.prototype, '$' + item, { value: data[item] }));
}
};
export default http;
然后在main.js中导⼊包使⽤:
import http from './assets/js/http';
Vue.use(http, {
timeout: 60000,
inRequest (config) {
config.headers['Authorization'] =
+ Item('AccessToken');
return config;
},
inResponse (response) {
return response;
}
});
之后在⼦组件中就可以直接使⽤this.$post等了
⽐如:
this.$post("你的url", {
CityId: cityid,
Type: 3
})
.then(res => {
if (res.Success) {
this.searchSecondary = res.Data;
}
})
.catch(error => {
console.log(error);
});
以上这篇Vue中 axios delete请求参数操作就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论