uni-app request:fail abort statusCode:-1 Unexpected char 0x5b54 at 104

uni-app request:fail abort statusCode:-1 Unexpected char 0x5b54 at 104 产品分类:
uniapp/App

PC开发环境操作系统:
Windows

PC开发环境操作系统版本号:
Windows 10 专业版 19042.1052

HBuilderX类型:
正式

HBuilderX版本号:
3.1.18

手机系统:
Android

手机系统版本号:
Android 7.1.1

手机厂商:
vivo

手机机型:
X9

页面类型:
vue

打包方式:
离线

项目创建方式:
HBuilderX

开发环境 版本号 项目创建方式
Windows 10 专业版 19042.1052 HBuilderX
Android 7.1.1 -

示例代码:

request.js

import { config } from './config.js'
export const apiResquest = (prams) => { //prams 为我们需要调用的接口API的参数 下面会贴具体代码
    return new Promise((resolve, reject) => {
        let url = config.base_url + prams.url; //请求的网络地址和局地的api地址组合
        let type = prams.method;
        let query = prams.query;
        let AuthorizationToken =  uni.getStorageSync('token') || ''
        let headerData = {query,AuthorizationToken};
        uni.showLoading({
            title: '加载中',
            mask: true
        })
        console.log(111)
        uni.request({
            method: type,
            url: url,
            data:query,
            header: headerData,
            dataType: 'json',
        }).then((response) => {
            console.log(response)
            setTimeout(function() {
                uni.hideLoading();
            }, 200);
            let [error, res] = response;
            resolve(res.data);
        }).catch(error => {
            let [err, res] = error;
            reject(err)
        })
    });
}

sestting.js

import { apiResquest } from '../../request.js'
export const userUpdate = (query) => {
    return apiResquest({
        url: '/user/api/user/update',
        method: 'POST',
        query: {...query}
    })
}

methods:

userUpdate() {
    const query = {
        id:this.userInfo.id,
        headImg: this.userInfo.headUrl,
        nickname:this.userInfo.realName
    }
    console.log(query)
    userUpdate(query).then((res) => {
        console.log(res)
        let code = res.code
        if (code == 0) {
            uni.showToast({
                title: '修改成功',
                duration: 2000,
                icon: 'success'
            })
        } else {
            let msg = res.msg
            uni.showToast({
                title: msg,
                duration: 2000,
                icon: 'none'
            })
        }
    }).catch(err => {
        console.log(err)
    })
},

操作步骤:

提交https请求,携带中文json报错 stateCode=-1 ,不带中文可请求成功


预期结果:


可提交中文

实际结果:

带中文报错


bug描述:


18:06:09.565 Unhandled promise rejectionTypeError: Invalid attempt to destructure non-iterable instance.
18:06:09.598 In order to be iterable, non-array objects must have a [Symbol.iterator]() method.

更多关于uni-app request:fail abort statusCode:-1 Unexpected char 0x5b54 at 104的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

问题已解决,header 携带过多参数问题.

更多关于uni-app request:fail abort statusCode:-1 Unexpected char 0x5b54 at 104的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个错误主要是由两个问题导致的:

  1. 请求头设置错误:在你的代码中,header: headerData 的写法有问题。headerData 是一个包含 queryAuthorizationToken 的对象,但 HTTP 请求头应该是键值对形式,且 query 作为键名不符合规范。

  2. Promise 回调参数解析错误:uni.request 的 then/catch 回调中,参数是一个数组 [error, res],但你的解构方式不正确。

修改建议:

1. 修正请求头设置:

let headerData = {
    'Content-Type': 'application/json',
    'Authorization': AuthorizationToken
};

2. 修正 Promise 回调处理:

uni.request({
    method: type,
    url: url,
    data: query,
    header: headerData,
    dataType: 'json',
}).then((response) => {
    uni.hideLoading();
    // 正确解构数组参数
    const [error, res] = response;
    if (error) {
        reject(error);
        return;
    }
    resolve(res.data);
}).catch(error => {
    uni.hideLoading();
    reject(error);
});

3. 确保服务器支持中文编码: 检查服务器端是否正确设置了 UTF-8 编码,特别是在接收 JSON 数据时。

4. 检查网络配置: 由于是离线打包,确认 manifest.json 中已正确配置网络请求权限:

{
    "networkTimeout": {
        "request": 10000
    }
}
回到顶部