收藏
回答

iPhone上wx.request不应该把返回数据都当成json解析

问题模块
API和组件

出现 errMsg: "request:fail response data convert to utf8 fail"


wx.request({

        url: "https://www.example.com/api",
        data: "post data string",
        method: 'POST',
        header: {
            "content-type": "text/plain"
        },
        success: function (res) {
            console.log(["success", res]);
        },
        fail: function (res) {
            console.log(["failed", res])
        },
        complete: function () {
            // complete
            console.log("complete");
        }
    });



开发工具 和 安卓真机 都正常,iPhone上报错,感觉是当成json数据解析。


实际上返回的是应该是图片二进制数据, 尝试请求时增加 dataType: "text" 无效, 增加 header:{"accept": "image/*"} 也无效。


希望尽快修复。



最后一次编辑于  2017-01-20  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏关注问题回答

5 个回答

  • 韬々
    韬々
    2017-01-23

    如果需要下载图片回显,可以考虑接口返回url,然后使用image组件显示。或者直接使用wx.downloadFile接口下载文件

    2017-01-23
    赞同
    回复
  • pubby
    pubby
    2017-01-23

    @韬々


    wx.request文档里说:dataType默认为 json。如果设置了 dataType 为 json,则会尝试对响应的数据做一次 JSON.parse


    可是没有说明dataType支持哪些,我即使设置为text 它也报响应UTF8错误


    另外我不是要下载图片,服务端接口也不是我写的,总之没法拿到请求结果了。


    安卓和开发工具上都正常,说明在iOS上实现有bug

    2017-01-23
    赞同
    回复
  • Special
    Special
    2017-01-23

    有对应的链接不

    2017-01-23
    赞同
    回复
  • pubby
    pubby
    2017-01-23

    @Special 返回的是图片二进制数据,的确不是有效的UTF8字符串


    于是iPhone的微信上我没办法获取这些响应的原始数据。(对方 HTTP/1.1 200 OK 的)


    其实我觉得不管如何,wx.request需要有获取返回的Header,以及原始响应信息的方法


    因为有些接口需要客户端这边对原始信息进行校验的,或者用解密算法处理原始二进制数据


    自动进行 JSON.parse 只能作为一种满足普遍需求的辅助行为

    2017-01-23
    赞同
    回复
  • pubby
    pubby
    2017-01-23

    @Special 或者让 dataType 支持  "binary"  "application/octet-stream" 之类的?

    2017-01-23
    赞同
    回复