uni-app uni.request后端返回错误不进入fail方法,进入了success方法
uni-app uni.request后端返回错误不进入fail方法,进入了success方法
示例代码:
uni.request({
url: this.websiteUrl+'/user/login',
data: {
userLoginName:_this.phoneData,
password:_this.passData,
},
method:'POST',
header: {
//'custom-header': 'hello' //自定义请求头信息
},
success: (res) => {
console.log(res);
_this.isRotate=false;
if(res.status!=200){
uni.showToast({
icon: 'none',
position: 'bottom',
title: res.data.message
});
return;
}
let data = res.data.data;
if(data.portStatus=="loginSuccess"){
uni.setStorageSync('token', data.token);
uni.navigateTo({
url: 'filmList',
animationType: 'pop-in',
animationDuration: 200
});
}
else{
uni.showToast({
icon: 'none',
position: 'bottom',
title: data.errorMsg
});
}
},
fail:(res)=>{
_this.isRotate=false;
uni.showToast({
icon: 'none',
position: 'bottom',
title: '网络错误'
});
}
});
操作步骤:
就写个uni.request,浏览器执行,后端抛异常进入接口错误返回,但是会发现只执行success方法,不执行fail方法
预期结果:
应当正常服务器返回错误进入fail方法
实际结果:
进入的是success方法
bug描述:
uni.request后端返回501错误不进入fail方法,进入了success方法,详情见图片

| 信息类别 | 描述 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境 | Mac |
| PC操作系统版本 | macOS Majave10.14 |
| 开发工具 | HBuilderX |
| 工具版本 | 3.1.13 |
| 手机系统 | Android |
| 手机系统版本 | Android 9.0 |
| 手机厂商 | 华为 |
| 手机机型 | meta |
| 页面类型 | vue |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
更多关于uni-app uni.request后端返回错误不进入fail方法,进入了success方法的实战教程也可以访问 https://www.itying.com/category-93-b0.html
success的回调函数是请求成功的函数,你能看到后端的错误就证明这次请求是成功的。fail函数一般在这次请求失败(网络错误)的时候触发。
更多关于uni-app uni.request后端返回错误不进入fail方法,进入了success方法的实战教程也可以访问 https://www.itying.com/category-93-b0.html
我404错误都能进success就离谱!
浏览器的断点进入到success执行了
这是uni.request的正常行为。uni.request的fail回调只在网络层面发生错误时触发,比如网络不可用、请求超时、域名解析失败等情况。
当服务器能够响应请求时,无论HTTP状态码是200、400、501还是其他,都会进入success回调。服务器返回的HTTP状态码可以通过res.status获取。
在你的代码中,服务器返回501状态码,说明请求已经到达服务器并得到了响应,因此会执行success方法。这是符合预期的行为。
建议在success回调中统一处理各种HTTP状态码:
success: (res) => {
console.log(res);
_this.isRotate = false;
// 统一处理非200状态码
if(res.status !== 200) {
uni.showToast({
icon: 'none',
position: 'bottom',
title: `请求失败:${res.status}`
});
return;
}
// 处理业务逻辑
let data = res.data.data;
if(data.portStatus == "loginSuccess") {
// 登录成功逻辑
} else {
// 业务失败逻辑
}
}

