axios 如何解决重复提交
项目使用了Axios,如何避免服务器卡顿时后用户可能重复提交表单的问题.
看axios文档提供了CancelToken来取消请求的方法,但是不知道如何使用,
求大神指点一下
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
项目使用了Axios,如何避免服务器卡顿时后用户可能重复提交表单的问题.
看axios文档提供了CancelToken来取消请求的方法,但是不知道如何使用,
求大神指点一下
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(7)
这个问题也困扰我很久。原生的倒是有abort()实现。。网上关于axios库取消上次请求的例子太少。官方文档说得也太简洁。本屌水平太烂、看了一天也没个头绪。后面这试下那试下。倒是出来了。。希望对楼主有帮助。
我的是VUE项目。。依据官方。。。还可以通过传递一个 executor 函数到 CancelToken 的构造函数来创建 cancel token。。。。
export default {
}
额,对于你遇到的问题
也许你想要的答案是 - 如何不发重复的请求。
那么,如何不发重复的请求呢?
最简单的办法是,如果请求没有返回(失败或者成功),禁止再提交。在前端,可以disable提交按钮,或者disable提交函数, 具体可以参考各种手机验证码发送按钮的设计。从根本上解决用户重复提交。
这个办法还有一个必须要注意的是,如果服务器返回时间太长,用户等待可能会比较久,体验会很差。所以,前端必须要设置timeout。
不管服务器是否卡顿,超过1秒钟,axios自动结束。用户又可以再点击提交了。当然,记得在发现timeout之后调用cancel。
以上,就是解决这个问题前端要做的事情。
引自https://www.kancloud.cn/yunye...最后面取消部分
使用 cancel token 取消请求
Axios 的 cancel token API 基于cancelable promises proposal,它还处于第一阶段。
可以使用 CancelToken.source 工厂方法创建 cancel token,像这样:
还可以通过传递一个 executor 函数到 CancelToken 的构造函数来创建 cancel token:
用个 布尔变量(例如:canPost) 就可以了啊,判断用户提交后,没成功之前将canPost置为 false ,每次请求的时候都会判断这个变量,如果变量为 false 直接return就好了
goHold(subData) {
我是用变量控制的
我没用 axios自带xxx ,直接在拦截器里面 用这个方法吧 模拟session 做一个 请求有效性数组
具体实现如:`// 设置缓存时间 和缓存请求数组
var requestUrl = [], saveTime = 1000;
http 拦截器中处理:
const Interceptor = function (obj,callback) {
};`
https://www.zhihu.com/questio...
https://www.npmjs.com/package... 借鉴别人的以及axios文档,一个简单的方法