广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue cli3 项目中如何使用axios发送post请求
  • 277
分享到

vue cli3 项目中如何使用axios发送post请求

2024-04-02 19:04:59 277人浏览 八月长安
摘要

目录使用axiOS发送post请求首先需要安装对应的第三方包发送post请求 发送get请求将index.js中再添加如下代码Vue使用axios的踩坑记录axios跨域解

使用axios发送post请求

React  同样适用

首先需要安装对应的第三方包

  • cnpm  i  -S axios
  • cnpm  i  -S lodash

然后在做下边的

在vue 项目中创建一个这样的文件目录

发送post请求 

index.js中的文件内容是:

import axios from "axios"
import _ from "lodash"
 
// 处理请求参数
const coverFORMData = (obj) => {
	let data = Object.keys(obj.data).map(item => {
		let value = obj.data[item];
		if(_.isArray(value) || _.isObject(value)){
			value = JSON.stringify(value)
		}
		return encodeURIComponent(item) + '=' + encodeURIComponent(value);
	}).join('&');
 
	return {data: data, url: obj.url};
}
 
function post(obj) {
	const { data, url } = coverFormData(obj);
	return new Promise((resolve, reject) => {
		axios.post(url,  data)
			.then(res => {
				// obj.success ? obj.success(res) : null
				resolve(res.data);
			})
			.catch(error => {
				// obj.error ? obj.error(error) : null;
				reject(error);
			})
	})
 
}
 
let requests = {}
requests.post = post
 
export default requests

使用:

 效果:

发送get请求将index.js中再添加如下代码

requests.get = obj => {
	const { data, url } = coverFormData(obj);
	return new Promise((resolve, reject) => {
		axios.get(url + '?' + data).then(res => {
			obj.success ? obj.success(res) : null;
			resolve(res.data);
		}).catch(error => {
			obj.error ? obj.error(error) : null;
			reject(error);
		})
	})
}

使用和post的一模一样只是将requests.post改成request.get

vue使用axios的踩坑记录

axios跨域

在自己写的一个项目中,想要直接将学号和密码发到学校的教务系统,结果跨域了。。。。。。

原代码

// url为要访问的域名
axios.get(`${url}?method=authUser&xh=${this.sNo}&pwd=${this.passWord}`)
.then((res) => {
    // ...
}).catch((err) => {
	// ...
})

在这里插入图片描述

在网上找解决跨域的问题时,看到很多都是修改config下的…文件,但是vue-cli脚手架创建的vue3项目中并没有config文件夹,所以直接去到官方文档查找配置

解决方法

在package.json同级文件夹下创建vue.config.js,配置如下

module.exports = {
    devServer: {
        proxy: {
            '/api': {
                target: 'url', //设置要访问的域名和端口号
                changeOrigin: true, //设置为跨域
                pathRewrite: {
                    '^/api': '/' //这里理解成用‘/api'代替target里面的地址,在后面发起请求时,/api就会代替target中的值,可以实现跨域
                }
            }
        }
    }
}

修改我们的请求代码

axios.get(`/api/app.do?method=authUser&xh=${this.sNo}&pwd=${this.password}`)
            .then((res) => {
                // ...
            }).catch((err) => {
				// ...
            })

这里使用/api替换了原来的url,实现跨域

axios发起post请求后端无法接收数据

在第一次使用axios向后台发送post请求时,发现自己发送的数据后端没有接收到,后端用的是spring框架,但是同样的请求我使用自己的node服务器测试时却好好的

原代码

axios.post(url,{data:data})
  .then(res => {
      // ...
  }).catch(err => {
      // ...
  })

我用node服务器打印请求发过拉的数据,都能得到{"data":1},但是后端那里总是只能得到null

在查看前后端代码后总是觉得没问题,唯一的变数只有axios了,所以去到淘宝镜像上看axios的使用,看到特性里面的概述

在这里插入图片描述

大概就是说可以对请求中的数据和响应的数据做格式转换,而且会自动对json数据做转换,我尝试将上面的请求改成使用非json格式传输

axios.post(url,`data=${data}`)
  .then(res => {
      // ...
  }).catch(err => {
      // ...
  })

意料之中的成功了,那么为什么呢,在查阅资料后,终于在GitHub上找到了对应的源码

transformRequest: [function transformRequest(data, headers) {
	    normalizeHeaderName(headers, 'Accept');
	    normalizeHeaderName(headers, 'Content-Type');
	    if (utils.isFormData(data) ||
	      utils.isArrayBuffer(data) ||
	      utils.isBuffer(data) ||
	      utils.isStream(data) ||
	      utils.isFile(data) ||
	      utils.isBlob(data)
	    ) {
	      return data;
	    }
	    if (utils.isArrayBufferView(data)) {
	      return data.buffer;
	    }
	    if (utils.isURLSearchParams(data)) {
	      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
	      return data.toString();
	    }
	    // 看这里------------------------------------------
	    if (utils.isObject(data)) {
	      setContentTypeIfUnset(headers, 'application/json;charset=utf-8');
	      return JSON.stringify(data);
	    }
	    return data;
	  }]

当判断为对象时,会把headers设置为application/json;charset=utf-8,也就是Content-Type,而根据项目组里的后端同学所说的,服务端要求的是Content-Type': 'application/x-www-form-urlencoded,我试着在发送请求前将headers设置为application/x-www-form-urlencoded,结果还是不行,大概是因为源码中对headers的修改在自己的设置之后实现的,但是这样写的话,要写出一串很长的字符串,感觉挺麻烦的,那就可以尝试下面的方法

因为源码中是通过transformRequest来修改headers的,而这个方法我们其实也可以自己实现,所以我们只要在发送请求的时候自己来实现这个方法就可以了,这里通过修改data的数据结构来达到目的

import Qs from 'qs'
axios({
	url:url,
	data:{
		data:data
	},
	transformRequest: [function (data) {
	    // 对data的数据格式进行修改
	    return Qs.stringify(data)
    }],
	headers: {
		'deviceCode': 'A95ZEF1-47B5-AC90BF3'
	})
	 .then(res => {
      // ...
  }).catch(err => {
      // ...
  })

上面是将data的数据格式进行转换,但是我们也可以选择修改处理data的方式


axios({
	url:url,
	data:{
		data:data
	},
	transformRequest: [function transformRequest(data, headers) {
	    normalizeHeaderName(headers, 'Accept');
	    normalizeHeaderName(headers, 'Content-Type');
	    if (utils.isFormData(data) ||
	      utils.isArrayBuffer(data) ||
	      utils.isBuffer(data) ||
	      utils.isStream(data) ||
	      utils.isFile(data) ||
	      utils.isBlob(data)
	    ) {
	      return data;
	    }
	    if (utils.isArrayBufferView(data)) {
	      return data.buffer;
	    }
	    if (utils.isURLSearchParams(data)) {
	      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
	      return data.toString();
	    }
	    // 看这里------------------------------------------
	    if (utils.isObject(data)) {
	      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
	      let _data = Object.keys(data)
	      return encodeURI(_data.map(name => `${name}=${data[name]}`).join('&'));
	    }
	    return data;
	  }])
	 .then(res => {
      // ...
  }).catch(err => {
      // ...
  })

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: vue cli3 项目中如何使用axios发送post请求

本文链接: https://www.lsjlt.com/news/145178.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue cli3 项目中如何使用axios发送post请求
    目录使用axios发送post请求首先需要安装对应的第三方包发送post请求 发送get请求将index.js中再添加如下代码vue使用axios的踩坑记录axios跨域解...
    99+
    2022-11-13
  • vue cli3项目中怎么使用axios发送post请求
    今天小编给大家分享一下vue cli3项目中怎么使用axios发送post请求的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了...
    99+
    2023-06-29
  • Vue中怎么使用axios发送post请求
    Vue中怎么使用axios发送post请求,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。vue-resource不再维护之后,我也用起了a...
    99+
    2022-10-19
  • 在vue项目中使用axios发送post请求出现400错误的解决
    目录使用axios发送post请求出现400错误出现400状态码主要有两种原因总结了错误的几个原因vue axios400 Bad Request问题使用axios发送post请求出...
    99+
    2022-11-13
  • Vue项目如何创建首页发送axios请求
    这篇文章主要介绍了Vue项目如何创建首页发送axios请求的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue项目如何创建首页发送axios请求文章都会有所收获,下面我们一起来看看吧。这是个全新的Vue项目,引...
    99+
    2023-07-05
  • VUE项目使用axios发送post跨域请求,返回数据失败问题
    Access to XMLHttpRequest at 'http://xxxx' from origin 'http://localhost:8080' has been blocked by CORS policy: Response ...
    99+
    2023-09-24
    服务器 javascript vue.js mysql
  • vue项目中如何使用axios发送请求让ajax请求头部携带cookie
    这篇文章主要为大家展示了“vue项目中如何使用axios发送请求让ajax请求头部携带cookie”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue项目中如何...
    99+
    2022-10-19
  • 如何在Vue项目中使用axios请求
    目录1、安装2、没有封装存在的问题3、创建文件4、请求地址配置5、axios 配置,设置请求头及响应码处理6、使用在实际的项目中,和后台的数据交互是少不了的,我通常使用的是 axio...
    99+
    2022-11-12
  • React中如何使用axios发送请求
    小编给大家分享一下React中如何使用axios发送请求,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!React中安装并引入axios依赖在React项目中使用a...
    99+
    2023-06-20
  • 使用axios发送post请求返回400状态码如何解决
    使用axios发送post请求返回400状态码如何解决,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前台代码如下:axios(...
    99+
    2022-10-19
  • SpringBoot 如何使用RestTemplate发送Post请求
    目录背景:1、待访问的API2、返回对象3、将发送Post请求的部分封装如下4、UserInfo对象5、在Service层封装将要发送的参数6、在控制器中调用service中的方法,...
    99+
    2022-11-12
  • vue中如何使用axios数据请求get、post方法
    小编给大家分享一下vue中如何使用axios数据请求get、post方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!vue中使用axios方法我们先安装axios这个方法npm inst...
    99+
    2022-10-19
  • Vue项目中如何封装axios(统一管理http请求)
    1、需求说明 在使用Vue.js框架开发前端项目时,会经常发送ajax请求服务端接口,在开发过程中,需要对axios进一步封装,方便在项目中的使用。 2、Vue项目结构 在本地创...
    99+
    2022-11-12
  • vue项目中如何使用axios
    这篇文章主要介绍了vue项目中如何使用axios的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue项目中如何使用axios文章都会有所收获,下面我们一起来看看吧。Axios简介axios框架全称(ajax –...
    99+
    2023-07-04
  • 项目中如何使用axios过滤多次重复请求
    这篇文章主要讲解了“项目中如何使用axios过滤多次重复请求”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“项目中如何使用axios过滤多次重复请求”吧!目录一、前言:这个情况下,我们通常的做...
    99+
    2023-06-20
  • 项目中如何使用axios过滤多次重复请求详解
    目录一、前言:这个情况下,我们通常的做法有两种:二、CancelToken类最终效果总结一、前言: 我们在web应用开发过程当中,经常会遇到一个时刻发起了多个请求的场景 这个情况...
    99+
    2022-11-12
  • 如何在 Vue 中使用 Axios 异步请求API
    目录设置基本 HTTP 请求 Axios 配合 async/await Axios 的错误处理 发送POST请求 用 Axios 编写可复用的 API 调用 最终代码设置基本 HTT...
    99+
    2022-11-12
  • 如何使用golang中的http.Post函数发送POST请求并获取响应
    如何使用golang中的http.Post函数发送POST请求并获取响应在使用golang进行网络编程时,http包是我们经常使用的一个重要模块。其中,http.Post函数是一个非常实用的函数,可以方便地发送POST请求并获取响应结果。下...
    99+
    2023-11-18
    Golang POST请求 httpPost
  • 如何在Java项目中利用post请求对Json进行封装
    如何在Java项目中利用post请求对Json进行封装?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。直接上代码String longUrl = ...
    99+
    2023-05-31
    json java post
  • 在java项目中使用java.net.URLConnection实现一个发送HTTP请求功能
    这期内容当中小编将会给大家带来有关在java项目中使用java.net.URLConnection实现一个发送HTTP请求功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、前言如何通过Java发送HT...
    99+
    2023-05-31
    java.net.urlconnection http java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作