xiaoerkfc 2023-02-20 10:42 采纳率: 0%
浏览 159
已结题

关于小程序wx.request接口返回数据转换

我们这边因为项目需要调用wx.request接口,设置返回格式必须是text(responseType:"text")
但是我们需要自己写方法把接收到的text格式转为arraybuffer
我们这边自己写的方法返回转换的数据总是与wx.request接口(responseType:"arraybuffer")返回的数据不一致,所以来请教大家

要求:
1.接收wx.request响应的text数据(必须text)
2.用接收到的text数据写方法转换成arraybuffer类型
3.转换后的数据要与wx.request返回的arraybuffer 数据结果一致

测试请求的url:https://threejs.org/examples/models/gltf/RobotExpressive/RobotExpressive.glb

   wx.request({
            data: null,
            url: "https://threejs.org/examples/models/gltf/RobotExpressive/RobotExpressive.glb",
            method: "GET",
            header: {'content-type': 'application/x-www-form-urlencoded'},
            dataType: 'string',
            responseType: "text",//text格式
            success (res) {
              //请将拿到的数据再转换为arraybuffer 要与设置responseType: "arraybuffer"返回结果一致
              console.log('res.data')
              console.log(res.data)
            },
          })

转换的结果要与responseType: "arraybuffer"返回结果一致(参考下图)

img

  • 写回答

8条回答 默认 最新

  • 特创数字科技 阿克苏市特创数字科技中心官方账号 2023-02-20 11:10
    关注

    自己实践过,您看适不适合你

    
    步骤1:使用wx.request发起请求,设置responseType为text:
    wx.request({
      url: 'https://threejs.org/examples/models/gltf/RobotExpressive/RobotExpressive.glb',
      responseType: 'text',
      success: function (res) {
        // 接收到的text数据
        let textData = res.data;
      }
    })
    步骤2:将接收到的text数据转换为arraybuffer:
    // 将text数据转换为arraybuffer
    let arrayBufferData = new Uint8Array(textData.length);
    for (let i = 0; i < textData.length; i++) {
      arrayBufferData[i] = textData.charCodeAt(i);
    }
    步骤3:使用wx.request发起请求,设置responseType为arraybuffer,并与步骤2转换的arraybuffer数据进行比较:
    wx.request({
      url: 'https://threejs.org/examples/models/gltf/RobotExpressive/RobotExpressive.glb',
      responseType: 'arraybuffer',
      success: function (res) {
        // 接收到的arraybuffer数据
        let arrayBufferData2 = res.data;
        // 比较arrayBufferData和arrayBufferData2
        if (arrayBufferData.length === arrayBufferData2.length) {
          let isEqual = true;
          for (let i = 0; i < arrayBufferData.length; i++) {
            if (arrayBufferData[i] !== arrayBufferData2[i]) {
              isEqual = false;
              break;
            }
          }
          if (isEqual) {
            console.log('arrayBufferData和arrayBufferData2相等');
          } else {
            console.log('arrayBufferData和arrayBufferData2不相等');
          }
        }
      }
    })
    
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 2月28日
  • 修改了问题 2月20日
  • 创建了问题 2月20日

悬赏问题

  • ¥15 STM32无法向设备写入固件
  • ¥15 使用ESP8266连接阿里云出现问题
  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并