el-form中保存时axios发请求不进入then进入catch

问题描述

今天接手之前同事写的代码的时候遇到一个问题:

点击 编辑 中的 保存按钮 或者是 删除 的时候, 请求可以发送成功, 但是控制台总会显示报错信息.

页面上的elementUI提示也是 $message.error 形式的.

请求发送之后的 .then 也进不去, 反而会显示 .catch 中的内容.

在这里插入图片描述
在这里插入图片描述
然后我就开始百度:
在这里插入图片描述
得知产生这种问题的原因主要有以下几种:

  1. 当axios请求完成后走的是then的代码块,如果then代码块中存在错误代码信息,这时就会进入catch中>抛出异常(注意:此时控制台并不会报错,因为错误被catch捕获了)

  2. axios是异步发起,若发起后页面刷新,那么就会丢失当前进程,导致接收不到。例如 form表单,点击>按钮提交后,表单会刷新

具体可以参考: https://www.jianshu.com/p/0781c10c8ac8

因为我的页面布局中 新建编辑 页面弹出使用的 elementUI 的对话框 ( el-dialog ), 在对话框中添加的 el-form 表单, 所以到这里我以为是因为表单会自动刷新, 导致进程丢失引起的. 所以我又开始百度避免表单自动刷新的方法:

在表单提交的时候,浏览器会默认发送一个get或者post请求到指定页面,刷新整个页面。阻止浏览器的默认行为,可以用事件对象e.preventDefault()

但像上述form表单提交的这种浏览器默认事件,每次都要写e.preventDefaul()其实还是比较麻烦。vue中可以更好的解决,只要在事件的后面添加一个prevent修饰符即可,表示阻止默认事件

可以参考: https://www.jianshu.com/p/5d2ca05b70b3

但是我设置了还是没什么用… 也怪自己对elementUI不够了解, 然后我就吃饭去了.

吃完饭回来偶然看到一篇博文提到了 响应拦截器, 我突然意识到可能是因为响应拦截器中设置了什么导致了这个问题. 果不其然 !

产生原因

之前的同时在响应拦截器中就获取了返回内容的 status 做了比较, 但是比较的时候出了问题:

  1. 响应拦截器中的代码:
    响应拦截器中的比较
  2. postman中的响应:
    在这里插入图片描述

代码中用的是 !== , 会进行数据类型的比较, 才导致了错误. 改成 != 以后就解决了.

!==!= 的区别:

  1. 比较结果上的区别
  • != 返回同类型值比较结果。

  • !== 不同类型不比较,且无结果,同类型才比较。

  1. 比较过程上的区别
  • != 比较时,若类型不同,会偿试转换类型。

  • !== 只有相同类型才会比较。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在 el-form 实现分页效果,可以使用 el-pagination 组件和表单的提交事件结合起来,具体步骤如下: 1. 在 el-form 表单添加 el-pagination 分页组件,并绑定当前页码和每页显示条数的变量。 ```html <el-form> <!-- 其他表单项 --> <el-pagination v-model="currentPage" :page-size="pageSize" @current-change="handlePageChange" background layout="prev, pager, next" :total="total" /> </el-form> ``` 2. 在 data 定义 currentPage 和 pageSize 变量,并在 methods 定义 handlePageChange 方法,该方法用于监听分页组件的页码变化事件,并重新获取数据。 ```javascript data() { return { currentPage: 1, pageSize: 10, total: 0, formData: { // 表单数据 }, tableData: [] } }, methods: { handlePageChange(newPage) { // 更新当前页码 this.currentPage = newPage; // 重新获取数据 this.getData(); }, getData() { // 请求获取数据 // ... // 更新表格数据和总记录数 this.tableData = data.list; this.total = data.total; }, submitForm() { // 提交表单,重新获取第一页的数据 this.currentPage = 1; this.getData(); } } ``` 3. 在 el-form 的提交事件,调用 getData 方法获取数据,并将 currentPage 和 pageSize 作为参数传递给后端接口,实现分页效果。 ```html <el-form @submit.prevent="submitForm"> <!-- 表单项 --> <el-button type="primary" native-type="submit">查询</el-button> </el-form> ``` ```javascript getData() { // 请求获取数据 axios.get('/api/data', { params: { currentPage: this.currentPage, pageSize: this.pageSize, ...this.formData } }).then(res => { // 更新表格数据和总记录数 this.tableData = res.data.list; this.total = res.data.total; }).catch(err => { console.log(err); }); }, ``` 这样,就可以在 el-form 表单实现分页效果了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Charonmomo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值