解决axios会发送两次请求,有个OPTIONS请求的问题


Posted in Javascript onOctober 25, 2018

问题描述:

Vue的开发者都知道axios,很多都用axios来进行数据交互,axios的默认请求头是Content-Type: application/json

使用这个请求头会出现向服务器请求两次的情况

为什么呢?

原因是:浏览器会首先使用 OPTIONS 方法发起一个预请求,判断接口是否能够正常通讯,如果不能就不会发送真正的请求过来,如果测试通讯正常,则开始真正的请求。

大概意思就是:

浏览器对后台说:我可以请求你吗? ( ̄ˇ ̄) 
后台说:阔以。( ̄? ̄)~*
结果是:发送原有的GET(POST)请求
后台说:不阔以。(??′)
结果是:报错

那么这样每个请求都会发送两次,无形加重了服务器的负担(如果服务器特厉害就当我没说),网上有的解决办法是让后台允许options请求,但是并不返回任何数据,那么就不会报错,可是这样治标不治本,浏览器还是来撩后台了,只是后台不让撩而已。

如何解决这个问题?不允许浏览器请求,只发送真正的请求,我也没解决,如果有已经解决的朋友可以告诉我解决方法~( ̄3 ̄)~

但.......

我有可以替代的方法

那就是在main.js中,设置axios的默认请求头axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded';

可是问题又来了

解决axios会发送两次请求,有个OPTIONS请求的问题

后台不认这个数据格式啊...

所以在传递的时候必须先把数据转换格式

这时候我们需要用到qs模块

npm install qs

在main.js中

引入qs模块

import qs from 'qs

然后弄qs原型

Vue.prototype.$qs = qs

这样我们就可以在axios post请求的时候将我们传递的数据转换成后台认识的格式

this.$axios
   .post("http://xxx/", 
    this.$qs.stringify(postData)
   ).then(data => {
    if (data.data.status != 200) {
     //xxx
    } else {
     //xxx
    }
   });

总结

以上所述是小编给大家介绍的解决axios会发送两次请求,有个OPTIONS请求的问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Node.js生成HttpStatusCode辅助类发布到npm
Apr 09 Javascript
基于jquery实现点击左右按钮图片横向滚动
Apr 11 Javascript
JS常用字符串处理方法应用总结
May 22 Javascript
JS常用函数和常用技巧小结
Oct 15 Javascript
jquery实现轮播图效果
Feb 13 Javascript
Angularjs中使用轮播图指令swiper
May 30 Javascript
require.js中的define函数详解
Jul 10 Javascript
PM2自动部署代码步骤流程总结
Dec 10 Javascript
JSON基本语法及与JavaScript的异同实例分析
Jan 04 Javascript
vue基础之模板和过滤器用法实例分析
Mar 12 Javascript
基于JS实现web端录音与播放功能
Apr 17 Javascript
vue + el-form 实现的多层循环表单验证
Nov 25 Vue.js
在Vue中使用axios请求拦截的实现方法
Oct 25 #Javascript
webpack4+react多页面架构的实现
Oct 25 #Javascript
浅谈让你的代码更简短,更整洁,更易读的ES6小技巧
Oct 25 #Javascript
代码整洁之道(重构)
Oct 25 #Javascript
Vue使用NPM方式搭建项目
Oct 25 #Javascript
小程序云开发实战小结
Oct 25 #Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
Oct 25 #Javascript
You might like
全国FM电台频率大全 - 1 北京市
2020/03/11 无线电
PHP实现简单ajax Loading加载功能示例
2016/12/28 PHP
简单谈谈 php 文件锁
2017/02/19 PHP
用Javscript实现表单复选框的全选功能
2007/05/25 Javascript
js function定义函数使用心得
2010/04/15 Javascript
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
javascript按位非运算符的使用方法
2013/11/14 Javascript
Mac/Windows下如何安装Node.js
2013/11/22 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
2014/03/27 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
js 获取范围内的随机数实例代码
2016/08/02 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
2017/07/19 Javascript
react native实现往服务器上传网络图片的实例
2017/08/07 Javascript
vux uploader 图片上传组件的安装使用方法
2018/05/15 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
python实现的DES加密算法和3DES加密算法实例
2015/06/03 Python
详解python持久化文件读写
2019/04/06 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
Python单元测试与测试用例简析
2019/11/09 Python
TFRecord文件查看包含的所有Features代码
2020/02/17 Python
python如何控制进程或者线程的个数
2020/10/16 Python
澳大利亚儿童和婴儿产品在线商店:Lime Tree Kids
2017/10/05 全球购物
澳大利亚婴儿喂养品牌:Cherub Baby
2018/11/01 全球购物
Android interview questions
2016/12/25 面试题
结婚典礼证婚词
2014/01/11 职场文书
婚礼新郎父母答谢词
2014/01/16 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
三峡人家导游词
2015/01/31 职场文书
2015年综治宣传月活动总结
2015/03/25 职场文书
入党转正申请报告
2015/05/15 职场文书
浅谈css实现背景颜色半透明的两种方法
2021/12/06 HTML / CSS
使用CSS定位HTML元素的实现方法
2022/07/07 HTML / CSS