欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Vue中 axios delete请求参数操作

程序员文章站 2022-09-16 21:20:56
vue中axios 的delete和post,put在传值上有点区别post和put有三个参数,url,data和config,所以在使用这两个时,可以写成axios.post(api,{id:1})...

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官网上有这么一句话

Vue中 axios delete请求参数操作

结合案例:

// 基于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中导入包使用:

Vue中 axios delete请求参数操作

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请求参数操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。