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方法,详情见图片

image

信息类别 描述
产品分类 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

4 回复

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 {
    // 业务失败逻辑
  }
}
回到顶部