如何修复React项目中Axios post请求未发起无响应的问题
Axios 登录请求无响应、无报错、Network无记录排查修复
问题对应代码
onSubmit() { this.$q.loading.show(); this.$axios.post("http://localhost/adminision/api/usermanager/login.php", { language: "vi", instituteid: this.$store.state.mainState.istituto, username: this.username, password: this.passwd }).then((t => { 1 == t.data.success ? (this.$store.commit("mainState/setLoginData", t.data.token), this.$store.commit("mainState/setFirstName", t.data.firstName), this.$store.commit("mainState/setLastName", t.data.lastName), this.$store.commit("mainState/setMatrixID", "login"), this.$q.sessionStorage.set("token", t.data.token), this.$router.push({ path: "/dashboard" })) : (this.$q.loading.hide(), this.validatormessage = "Username or password not valid", this.mostraerrori = !0) })).catch((t => { this.validatormessage = t.response.data.error.description, this.mostraerrori = !0 })) },
排查步骤(按优先级从高到低)
- 先确认
onSubmit方法是否真的被触发
在方法第一行加断点或者console.log('submit run'),点击提交按钮看是否命中。如果没触发,问题和axios无关,检查表单绑定:- Quasar的
q-form组件必须绑定@submit.prevent="onSubmit",漏写.prevent会触发原生表单默认提交,导致页面刚要发请求就被重载,Network面板不会留下记录。 - 检查提交按钮是否加了
type="submit",如果是按钮直接绑定@click触发方法,检查有没有拼写错误(比如把onSubmit写成onSumbit),Vue2下自定义组件绑定事件漏写.native修饰符也会导致事件不触发。
- Quasar的
- 检查axios请求拦截器逻辑
全局找axios初始化的代码,查看request拦截器:如果拦截器逻辑中任意分支没有return config,请求会直接卡在拦截器阶段,不会发出也不会抛错。典型错误写法:
确保所有request拦截器分支要么返回config,要么返回// 错误示例:拦截器漏写return config,请求直接挂起 axios.interceptors.request.use(config => { const token = localStorage.getItem('token') if(token) config.headers.Authorization = `Bearer ${token}` // 这里漏了return config })Promise.reject()抛出明确错误。 - 检查是否有本地Mock拦截
如果项目引入了Mock.js、类似接口拦截工具,且匹配到了当前login接口的路径但没有写返回逻辑,请求会被本地Mock直接截获,不会发送到后端,Network面板也不会有记录。临时注释掉Mock初始化代码再测试即可确认。 - 检查axios实例是否被异常覆写
在调用this.$axios.post前打印this.$axios,确认挂载在Vue原型上的是标准axios实例,post方法没有被覆写为空函数,也没有重复注册axios导致实例被覆盖。 - 排查浏览器插件影响
广告拦截、隐私防护类插件可能静默拦截带admin、login关键词的请求,不会在控制台报错也不会在Network留记录。开Chrome无痕模式、禁用所有扩展后重试即可排除。 - 修复现有代码的逻辑缺陷
现有代码存在两个容易吞掉错误的问题,先修正再调试:loading状态只在请求失败分支关闭,请求成功跳转、请求挂起时都会导致loading异常,应该把hide逻辑放到finally回调中统一执行。- catch回调直接读取
t.response.data.error.description,如果错误是请求未发出、无响应的场景,t.response是undefined,这行代码会直接抛错吞掉原始异常,要加可选链判断。
修正后的参考代码:
onSubmit() { this.$q.loading.show(); // 调试阶段加参数日志,确认入参没有undefined等异常 console.log('登录提交参数', { language: "vi", instituteid: this.$store.state.mainState.istituto, username: this.username, password: this.passwd }) this.$axios.post("http://localhost/adminision/api/usermanager/login.php", { language: "vi", instituteid: this.$store.state.mainState.istituto, username: this.username, password: this.passwd }).then((res => { console.log('登录接口响应', res) if(res.data.success == 1) { this.$store.commit("mainState/setLoginData", res.data.token) this.$store.commit("mainState/setFirstName", res.data.firstName) this.$store.commit("mainState/setLastName", res.data.lastName) this.$store.commit("mainState/setMatrixID", "login") this.$q.sessionStorage.set("token", res.data.token) this.$router.push({path: "/dashboard"}) } else { this.validatormessage = "Username or password not valid" this.mostraerrori = true } })).catch((err => { console.error('登录请求异常', err) this.validatormessage = err?.response?.data?.error?.description || err.message || '请求失败,请重试' this.mostraerrori = true })).finally(() => { // 无论成功失败都关闭loading this.$q.loading.hide() }) },
内容的提问来源于stack exchange,提问作者Hải Vũ Nguyễn
相关产品推荐
相关产品推荐

