uni-app uni.request 组件不返回请求http状态

uni-app uni.request 组件不返回请求http状态

开发环境 版本号 项目创建方式
Windows win10
HBuilderX 3.98
手机系统 版本号
Android Android 14
手机厂商 手机机型
小米 k60

示例代码:

class QLibClass {  
    requestTask = null as RequestTask | null  
    Post(url : string, params : UTSJSONObject | null) : Promise<UTSJSONObject> {  
        const reqHeader = {  
          "Content-Type": "application/json"  
        };  
        return new Promise((resolve, reject) => {  

                this.requestTask = uni.request<UTSJSONObject>({  
                    url: url,  
                    method:'POST',  
                    data: params,  
                    header: reqHeader,  
                    timeout: 6000,  
                    sslVerify: false,  
                    withCredentials: false,  
                    firstIpv4: false,  
                    success: (res) => {  
                        console.log(res)  
                        resolve(res.data as UTSJSONObject)  
                    },  
                    fail(err) {  
                        console.log(err)  
                        //const err = '网络错误,请联系管理员'  
                        reject(JSON.stringify(err))  
                    }  
                });  
            })  
    }  
}  

export const QLib =new  QLibClass();

操作步骤:

<script>  
    import { QLib } from "@/utils/QLib.uts"  
    export default {  
        data() {  
            return {  
                AccountName: '',  
                AccountPwd: "",  
            }  
        },  
        methods: {  
            DoLogin() {  
                const params : UTSJSONObject=JSON.parseObject('{"name":"Tom"}')!;
                QLib.Post("https://baidu.com/666",params).then(r => {  
                    console.log(r.getString('code'));  
                })  

            }  
        }  
    }  
</script>

预期结果:

UniError(errSubject='uni-request', errCode=100002, errMsg='error message invalid json', data=null, cause='null',HttpStatus=404)

实际结果:

UniError(errSubject='uni-request', errCode=100002, errMsg='error message invalid json', data=null, cause='null')

bug描述:

uni.request 请求接口返回404状态码 无法识别 返回错误 UniError(errSubject='uni-request', errCode=100002, errMsg='error message invalid json', data=null, cause='null')

更多关于uni-app uni.request 组件不返回请求http状态的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app uni.request 组件不返回请求http状态的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在使用 uni-appuni.request 进行网络请求时,如果发现请求没有返回 HTTP 状态码,可能有以下几种原因和解决方法:

1. 请求未成功发送

确保请求成功发送到服务器。可以通过以下方式检查:

  • 检查请求的 URL 是否正确。
  • 检查网络连接是否正常。
  • 使用浏览器的开发者工具或抓包工具(如 Charles、Fiddler)查看请求是否成功发送。

2. 服务器未正确响应

确保服务器正确处理了请求并返回了状态码。可以通过以下方式检查:

  • 检查服务器的日志,确保请求被正确处理。
  • 确保服务器返回了正确的响应状态码(如 200、404、500 等)。

3. uni.request 的使用问题

确保正确使用 uni.request。以下是一个基本的示例:

uni.request({
    url: 'https://example.com/api', // 请求的 URL
    method: 'GET', // 请求方法
    success: (res) => {
        console.log('请求成功:', res);
        console.log('状态码:', res.statusCode); // HTTP 状态码
        console.log('响应数据:', res.data); // 响应数据
    },
    fail: (err) => {
        console.log('请求失败:', err);
    },
    complete: () => {
        console.log('请求完成');
    }
});

4. 跨域问题

如果请求的 URL 与当前页面的域名不同,可能会遇到跨域问题。确保服务器允许跨域请求,或者使用代理服务器解决跨域问题。

5. 超时设置

如果请求超时,可能会导致请求失败。可以设置 timeout 参数来调整超时时间:

uni.request({
    url: 'https://example.com/api',
    method: 'GET',
    timeout: 10000, // 10秒超时
    success: (res) => {
        console.log('请求成功:', res);
    },
    fail: (err) => {
        console.log('请求失败:', err);
    }
});

6. 调试和日志

在开发过程中,可以通过 console.loguni.showToast 等方式输出调试信息,帮助定位问题。

7. 检查 uni-app 版本

确保使用的是最新版本的 uni-app,以避免已知的 bug。可以通过 npm updateyarn upgrade 更新依赖。

8. 检查 uni.request 的实现

如果以上方法都无法解决问题,可以检查 uni.request 的实现是否有问题,或者尝试使用其他网络请求库(如 axios)进行对比测试。

示例代码

以下是一个完整的示例代码,展示了如何使用 uni.request 并获取 HTTP 状态码:

uni.request({
    url: 'https://example.com/api',
    method: 'GET',
    success: (res) => {
        console.log('请求成功:', res);
        console.log('状态码:', res.statusCode);
        console.log('响应数据:', res.data);
    },
    fail: (err) => {
        console.log('请求失败:', err);
    },
    complete: () => {
        console.log('请求完成');
    }
});
回到顶部