您好,欢迎访问一九零五行业门户网

微信小程序中如何解决wx.request对于JSON 含\u2028的处理异常

这篇文章主要介绍了关于微信小程序中如何解决wx.request对于json 含\u2028的处理异常,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
问题描述最近在小程序的开发过程中,遇到一个神奇的问题。
小程序用于发起网络请求的 api wx.request 默认会对为 json 格式的响应体进行解析,返回 js object。
wx.request({    url: 'test.php', //仅为示例,并非真实的接口地址    data: {        x: '',        y: ''    },    header: {        'content-type': 'application/json' // 默认值    },    success: function(res) {        console.log(res.data)    }})
其中 res.data 一般会是 object 类型。
但是,响应体的 json 数据包含了 \\u2028 的字符,就会解释失败,输出的 res.data 是响应体的字符串类型。
样本测试样本:{“test”:”这里有一个特殊字符:
  }
测试代码:
wx.request({    ...    success: (res) => {        console.log('apifactory:run', '调试', { res });    },});
结果:
在 开发者工具 中,能正常解析
在 真机(ios 和 android),都解析失败
u2028该特殊字符就是 \u2028,解析为行分隔符。
该字符,在 json 字符串中,是被兼容的,是能被 json.parse 正常解析的。
但是 js 代码中有这个字符串,就会导致运行出错。
为什么真机和开发者工具表现不一致微信小程序运行在三端:ios、android 和 用于调试的开发者工具。
三端的js脚本执行环境是各不相同的:
在 ios 上,小程序的 javascript 代码是运行在 javascriptcore 中。
在 android 上,小程序的 javascript 代码是通过 x5 jscore来解析。
在 开发工具上, 小程序的 javascript 代码是运行在 nwjs 中。
而小程序的逻辑层和视图层,都是通过「weixinjsbridge」来调用 native api 的。
所以问题出在,wx.request 对于响应体的数据处理,到底是在 js engine 处理的,还是 native 处理的,在微信不公开小程序源码的情况下,不得而知。
wx.request 的处理对于我们来说,相当于黑盒,并且对于 res.data 的数据类型可能值是多种的,如果想在业务上提供更好的健壮性,还需要兼容 res.data 为 object/string 类型时的判断和容错代码。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注!
相关推荐:
javascript中array数组的tips的讲解
如何使用angular-ui bootstrap组件实现警报的方法
以上就是微信小程序中如何解决wx.request对于json 含\u2028的处理异常的详细内容。
其它类似信息

推荐信息