首页 > 其他分享 >[vue] ajax post form表单提交 json提交

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

时间:2022-12-21 10:38:23浏览次数:44  
标签:axios const form config vue 提交 res import data


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;


标签:axios,const,form,config,vue,提交,res,import,data
From: https://blog.51cto.com/u_12881709/5957924

相关文章

  • [vue] 解决keyup事件和blur重复调用,触发不同方法
    解决vue中keyup事件和blur重复调用在keyup触发的事件中解绑失焦函数,在获得焦点focus事件中绑定失焦函数。<template><el-inputv-model="inputVal"placeholder="......
  • vuex辅助函数使用
    辅助函数的认识:vuex的辅助函数有4个:mapState,mapGetters,mapMutations,mapActions辅助函数的写法:1、在页面引入import{mapState,mapGetters,mapMutatio......
  • [vue] watch对比computed
    文章目录​​computed计算属性实现姓名案例​​​​watch监视实现姓名案例​​​​对比​​​​姓名案例新需求时使用watch法​​​​computed和Iwatch之间的区别:​​compu......
  • 基于springboot+mybatis+vue软件缺陷管理系统
    @目录一、系统介绍二、功能展示1.主页2.个人中心3.缺陷管理4.项目管理5.系统管理6.统计分析三、代码展示四、获取源码一、系统介绍系统主要功能:开发人员:主页、个人中心(......
  • [vue] Vue绑定class样式
    1.class样式写法:class=“xxx”xxx可以是字符串、对象、数组。字符串写法适用于:类名不确定,要动态获取。对象写法适用于:要绑定多个样式,个数不确定,名字也不确定。数组写法适......
  • [element-ui] 多个Form表单同时验证
    <el-formref="form1"></el-form><el-formref="form2"></el-form><el-formref="form3"></el-form><el-formref="form4"></el-form>exportdefault{data(){......
  • [vue] 项目使用rem 单个组件 PC端自适应大屏
    rem.jsexportfunctionresetRem(){//基准大小baseSize=100;constbasePc=baseSize/1440;//表示1440的设计图,使用100PX的默认值constvW=window.inner......
  • [vue] 列表过滤
    基本页面<divid="root"><h2>人员列表</h2><inputtype="text"placeholder="请输入名字"v-model="keyWord"><ul><liv-for="(p,index)ofpersons":key="index......
  • [mapbox] popup挂载自定义组件 vue
    pop.vue<template><div>222</div></template><script>exportdefault{name:'display-map-pop',components:{},props:{PopObj:{type:Array,d......
  • [vue] 列表排序
    <divid="root"><h2>人员列表</h2><inputtype="text"placeholder="请输入名字"v-model="keyWord"><button@click="sortType=2">年龄升序</button><button@cl......