微信小程序的wx.sendSocketMessage接口发送不了ArrayBuffer还是写错了?

目前在开发一个项目,在微信开发者工具上使用下面代码发送数据,服务端可以收到数据并成功解析,但是在扫描开发者工具的调试二维码在手机真机上就无法发送数据,并在fail接口中报错

代码:

wx.sendSocketMessage({
    data: new Uint8Array([1,0,2,0,1]),
    success:function(e){
         console.log(e)
    },
    fail:function(e){
         console.log(e)
    },
    complete:function(e){
         console.log(e)
    }
});

报错信息:

sendSocketMessage:fail invaild data type

官方文档:

clipboard.png
烦劳思否大神前来协助,是代码写错了还是其他原因。

阅读 9.4k
1 个回答

首先感谢被我邀请的人关注,另外这个问题通过网上的资料查询找到解决办法了,出现这个问题的原因在于对二进制数据操作的不了解,下面提供解决办法。

// 小程序中sendSocketMessage是支持ArrayBuffer的,我这个错误原因在于new Uint8Array不是ArrayBuffer,而是他的一个属性值才是arrayBuffer
var init8arr = new Uint8Array([1,0,2,0,1]);
wx.sendSocketMessage({
    data: init8arr.buffer,
    success:function(e){
         console.log(e)
    },
    fail:function(e){
         console.log(e)
    },
    complete:function(e){
         console.log(e)
    }
});

另外还一个问题就是真机小程序中不支持 new TextDecoder()对象,函数,解决办法:

function decodeUTF8(arr) {
    var str = '';
    for (var i = 0; i < arr.length; i++) {
        str += String.fromCharCode(arr[i]);
    }
    return decodeURIComponent(escape(str));
}
 
console.log(decodeUTF8([230, 177, 137, 229, 173, 151]));

以上两个问题都是微信开发者工具与真机环境不一致的锅。

参考文章:

Uint8Array 拷贝操作的坑(buffer)
ie,TextDecoder.decode()函数不可用,fromCharCode输出中文乱码问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题