AbortController中止请求通信[模糊搜索案例]

AbortController中止请求通信[模糊搜索案例]

AbortController中止请求通信(模糊搜索案例)

这里用模糊搜索来做示例,这里是调用后端模糊搜索接口

该案例的中止请求可以用于很多地方,比如取消上传/下载文件等

  • 完整代码
javascript 复制代码
<template>
  <div>
    <input v-model="inputValue" @input="getData" type="text"/>
    <div v-for="item in list" :key="item">{{ item }}</div>
  </div>
</template>

<script>
export default {
  name: "Index",
  data() {
    return {
      inputValue: '',
      list: [],
      controller: null
    }
  },
  methods: {
    getData() {
      // this.controller && this.controller.abort(); // 如果存在控制器对象 那么就 在请求完成之前中止它
      // this.controller = new AbortController; // 创建一个新的控制器对象
      this.$axios({
        url: "/api/dirData",
        method:'GET',
        params: { value: this.inputValue },
        // signal: this.controller.signal // 根据需要处理DOM请求通信, 既可以建立通信也可以中止通信
      }).then(res => {
        this.list = res.data
      }).catch(err => {
        err.code !== "ERR_CANCELED" && console.log(err);
      })
    }
  }
}
</script>

该示例应该渲染的结果是包含1234的模糊搜索,但是结果却是123和1234

问题:由于请求的响应的时间不同,所以快速改变输入框的值会导致界面渲染错误。

解决:如果之前的请求还没有响应成功,那么就中止之前的请求。

解决的代码: 很简单,打开注释掉的 3 行代码即可

解决之后的运行结果,可以看到之前的请求已经被取消了。

如果之前的请求响应很快,在下一次请求之前就已经响应了呢,结果会渲染错吗?

答案是,当然不会,因为最后的请求结果会覆盖之前的结果

相关推荐
前端那点事2 分钟前
Vue线上代码调试全攻略(安全无侵入,新手也能上手)
前端·vue.js
摇滚侠3 分钟前
Java 零基础全套视频教程,面向对象(高级),笔记 105-120
java·开发语言·笔记
前端那点事6 分钟前
Vue批量文件上传并发踩坑指南:3步解决阻塞、限流、进度混乱
前端·面试
CN-Dust12 分钟前
【C++专题】输出cout例题
开发语言·c++
时空系12 分钟前
第6篇:多维数据盒——管理大量数据 python中文编程
开发语言·python·ai编程
charlie11451419115 分钟前
嵌入式Linux驱动开发(7) 从虚拟设备到真实硬件 —— LED驱动硬件基础
linux·开发语言·驱动开发·内核·c
桔筐22 分钟前
Vue3 v-model 双向绑定导致循环触发的坑
前端·javascript·vue.js
小短腿的代码世界24 分钟前
QCefView深度解析:Qt应用中嵌入Chromium浏览器的终极方案
开发语言·qt
Alice-YUE27 分钟前
前端图片优化完全指南:从格式到加载的全面提速方案
前端·笔记·学习
Reese_Cool35 分钟前
【STL】蓝桥杯/天梯赛终极杀器!10个C++字符串核心技巧,暴力破解高频考点
开发语言·c++·蓝桥杯·stl