小程序网络返回数据在真机上未能解析为json,开发工具上是正常的。
发布于 7 年前 作者 lei28 13725 次浏览 来自 问答

wx.request发出一个请求,接口响应为

Content-Type:

application/json;charset=UTF-8

的一个数据。

绝大部分情况下都是正常的respones.data为object类型,但是有一个,在真机上取到的respones.data 是string类型。

可能不是小程序的问题,但是这个情况很费解。

const app = getApp()
 
Page({
  data: {
    msg: ''
  },
  onLoad: function () {
    const self = this
    wx.request({
      url: 'https://class.dxy.cn/japi/platform/122120007?id=3',
      success: (res) => {

        console.log('typeof res.data:', typeof res.data)

// 调试工具为object 真机为string

        this.setData({
          msg: 'typeof res.data:' + typeof res.data
        })
      }
    })
  },
})

小程序网络返回数据在真机上未能解析为json, 需要appid以便在真机上复现。

代码片段

wechatide://minicode/3hdmzEmZ6jZH

4 回复

wx.request方法解析的时候出错导致的,有可能是你返回的数据中存在无法解析的内容。我的后台用的叔nodejs,遇到的是因为空格导致的解析失败。

将返回的内容替换一下就正确解析了。 string = string.replace(/\s/g," ");

具体怎么操作呢,目前我也遇到此问题

是因为返回的内容存在特殊字符,比如 u2028。相关的可以google一下。在chrome调试工具的network,看请求response,如果里面有奇怪的红点,那就是特殊字符了,这种字符“肉眼是看不见的”。奇怪的是pc和移动大部分浏览器似乎都会自动忽略掉。但是在微信里面,没有过滤,你对内容进行JSON.parse解析自然也会报错的。

有没有官方来回答一下这个问题的,我也遇到了

回到顶部