在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML5  HTML/ 微信小程序的wx.sendSocketMessage接口發(fā)送不了ArrayBuf

微信小程序的wx.sendSocketMessage接口發(fā)送不了ArrayBuffer還是寫錯了?

目前在開發(fā)一個項目,在微信開發(fā)者工具上使用下面代碼發(fā)送數(shù)據(jù),服務(wù)端可以收到數(shù)據(jù)并成功解析,但是在掃描開發(fā)者工具的調(diào)試二維碼在手機真機上就無法發(fā)送數(shù)據(jù),并在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
煩勞思否大神前來協(xié)助,是代碼寫錯了還是其他原因。

回答
編輯回答
安淺陌

首先感謝被我邀請的人關(guān)注,另外這個問題通過網(wǎng)上的資料查詢找到解決辦法了,出現(xiàn)這個問題的原因在于對二進制數(shù)據(jù)操作的不了解,下面提供解決辦法。

// 小程序中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()對象,函數(shù),解決辦法:

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]));

以上兩個問題都是微信開發(fā)者工具與真機環(huán)境不一致的鍋。

參考文章:

Uint8Array 拷貝操作的坑(buffer)
ie,TextDecoder.decode()函數(shù)不可用,fromCharCode輸出中文亂碼問題

2018年8月19日 04:52