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.com?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];
- 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 && axios.interceptors.request.use(Option.inRequest, error => {
- Promise.reject(error);
- });
- Option.inResponse && axios.interceptors.response.use(Option.inResponse, error => {
- Promise.reject(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;
- }
- axios.get(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'] =
- sessionStorage.getItem('TokenType') +" "
- + sessionStorage.getItem('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请求参数操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
原文链接:https://blog.csdn.net/w_e_i_1201/article/details/86006816