uni-app中uni.request在android下使用post协议提交长度为0的ArrayBuffer无法发起请求
uni-app中uni.request在android下使用post协议提交长度为0的ArrayBuffer无法发起请求
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
PC | Mac | |
手机 | Android | |
手机厂商 | 华为 | |
手机机型 | v30 | |
页面类型 | vue | |
vue | vue2 | |
打包方式 | 离线 | |
CLI | 3.3.13.20220314 | CLI |
示例代码:
let header: any = {
'Content-Type': 'application/octet-stream',
accept: 'application/octet-stream',
};
uni.request({
url: url,
method: 'POST',
data: new ArrayBuffer(),
header: header,
responseType: 'arraybuffer',
fail: (res: any) => {
console.error("uni.request", res)
},
success: (res: any) => {
console.log("uni.request", res)
}
})
`
3 回复
iOS还没有测试,不知道是否也存在这个问题
希望官方重视一下,现在都还有此问题
在 uni-app 中使用 uni.request
发起 POST 请求时,如果提交的 ArrayBuffer
长度为 0,可能会在某些 Android 设备上无法正常发起请求。这通常是由于底层网络库或设备本身的限制导致的。
解决方案
-
检查 ArrayBuffer 长度: 在发送请求之前,先检查
ArrayBuffer
的长度。如果长度为 0,可以采取其他处理方式,比如不发送请求,或者发送一个空的 JSON 对象。let arrayBuffer = new ArrayBuffer(0); if (arrayBuffer.byteLength === 0) { console.log("ArrayBuffer is empty, skipping request"); // 可以选择不发送请求,或者发送一个空的 JSON 对象 uni.request({ url: 'https://example.com/api', method: 'POST', data: {}, success: (res) => { console.log('Request successful:', res); }, fail: (err) => { console.error('Request failed:', err); } }); } else { uni.request({ url: 'https://example.com/api', method: 'POST', data: arrayBuffer, success: (res) => { console.log('Request successful:', res); }, fail: (err) => { console.error('Request failed:', err); } }); }
-
使用其他数据类型: 如果可能,考虑使用其他数据类型(如
JSON
或FormData
)来代替ArrayBuffer
,特别是在数据为空的情况下。let data = {}; // 使用空的 JSON 对象 uni.request({ url: 'https://example.com/api', method: 'POST', data: data, success: (res) => { console.log('Request successful:', res); }, fail: (err) => { console.error('Request failed:', err); } });
-
使用自定义请求头: 在某些情况下,设置自定义请求头可能会解决问题。你可以尝试设置
Content-Type
为application/octet-stream
或其他合适的类型。uni.request({ url: 'https://example.com/api', method: 'POST', data: arrayBuffer, header: { 'Content-Type': 'application/octet-stream' }, success: (res) => { console.log('Request successful:', res); }, fail: (err) => { console.error('Request failed:', err); } });