[vue] ajax post form表单提交 json提交

这篇博客详细介绍了三种使用axios库进行POST请求的方法,包括设置headers、qs.stringify和multer/form-data提交数据的方式,并展示了请求拦截器的配置,确保了请求过程中的token管理和错误处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

post form表单提交

方法一

import ajax from 'axios';
import qs from 'qs';

export const 接口名= (params, data) => ajax({
  method: 'post',
  url: `地址?${qs.stringify(params)}`,
  headers: {
    'Content-Type': 'multipart/form-data',
  },
  data,
});

请求

const params = {
	name:1
}
const data1 = {...}
接口名(params,data:data1).then((res) => {
   if (res.code === '00000') {
     
   } else {
     
   }
 });

方法二

export const 接口名= (data) =>
  axios.post(
    `地址?${data.query}`,
    data.data
  );

请求

const params1 = {
    query: `name=${this.name}`,
    data: '',
};
接口名(params1).then((res) => {
	if (res.code === '00000') {
	  
	} else {
	  this.$message.error(res.msg);
	}
});

方法三

export const 接口= (data) => axios.post('地址', data);

请求

const params1 = {
    name: this.name,
};
接口名(qs.stringify(params)).then((res) => {
	if (res.code === '00000') {
	  
	} else {
	  this.$message.error(res.msg);
	}
});

post json提交

import axios from '../axios';
export const  = (data) => axios.post('地址', data);

get

import axios from '../axios';
export const  = (params) => axios.get('地址', { params });

axios.js

/**
 * 全站http配置
 *
 * header参数说明
 * serialize是否开启form表单提交
 * isToken是否需要token
 */
import axios from 'axios';
import { Message } from 'element-ui';
import NProgress from 'nprogress';
import store from '@/store/';
import router from '@/router/router';
import { serialize, getSecHost } from '@/util/util';
import { getStore } from '@/util/store';
import { getToken } from '@/util/auth';
import website from '@/const/website';
import 'nprogress/nprogress.css';

axios.defaults.timeout = 10000;
// axios.defaults.crossDomain = true;
// 返回其他状态吗
axios.defaults.validateStatus = (status) => status >= 200 && status <= 500; // 默认的

// 跨域请求,允许保存cookie
axios.defaults.withCredentials = true;
// NProgress Configuration
NProgress.configure({
  showSpinner: false,
});

axios.interceptors.request.use((config) => {
  // 二级域名放在请求头中
  const domainField = 'X-TENANT-ID';
  const tokenField = 'X-ACCESS-TOKEN';
  const domain = getSecHost();
  config.headers[domainField] = domain;
  const token = getStore({
    name: 'token',
  });
  if (token) { // 判断是否存在token,如果存在的话,则每个http header都加上token
    config.headers[tokenField] = token;
  }

  NProgress.start(); // start progress bar
  const isToken = (config.data || {}).isToken === false;
  if (getToken() && !isToken) {
    config.headers.Authorization = `Bearer ${getToken()}`; // 让每个请求携带token--['Authorization']为自定义key 请根据实际情况自行修改
    // config.headers['Content-Type'] = "application/json"
  }
  // 为了判断是否为formdata格式,增加了一个变量为type,如果type存在,而且是form的话,则代表是formData的格式
  if (config.type && config.type === 'form') {
    config.headers['Content-Type'] = 'multipart/form-data; boundary=----WebKitFormBoundaryHg2OK8Uv9HBFvgcJ';
  }
  // headers中配置serialize为true开启序列化
  if (config.methods === 'post' && config.headers.serialize) {
    config.data = serialize(config.data);
    delete config.data.serialize;
  }
  return config;
}, (error) => Promise.reject(error));
// HTTPresponse拦截
axios.interceptors.response.use((res) => {
  NProgress.done();
  const status = Number(res.status) || 200;
  const statusWhiteList = website.statusWhiteList || [];
  const message = res.data.message || '未知错误';
  // 如果请求为200则放过,否者默认统一处理,或者在website中配置statusWhiteList白名单自行处理
  if (status !== 200 && status !== 401 && !statusWhiteList.includes(status)) {
    Message({
      message: '请求超时,请稍后重试' || message,
      type: 'error',
    });
    return Promise.reject(new Error(message));
  } if (status === 401) {
    Message({
      message: 'token已超时超时,',
      type: 'error',
    });
  }
  // 如果是401则跳转到登录页面
  if (status === 401) store.dispatch('LOG_OUT').then(() => router.push({ path: '/login' }));
  // 如果是404则跳转到404页面
  if (status === 404) router.push({ path: '/404' });

  // 如果是500则跳转到500页面
  if (status === 500) router.push({ path: '/500' });


  // 如果是白名单类型放入catch自行处理
  if (status !== 200) return Promise.reject(res);
  return res.data;
}, (error) => {
  NProgress.done();
  return Promise.reject(new Error(error));
});

export default axios;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值