微信小程序中如何解决wx.request对于JSON含\u2028的处理异常
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了微信小程序中如何解决wx.request对于JSON含\u2028的处理异常,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1944字,纯文字阅读大概需要3分钟。
内容图文
![微信小程序中如何解决wx.request对于JSON含\u2028的处理异常](/upload/InfoBanner/zyjiaocheng/286/0067639416dc42df8ea4f56aa1fc11a5.jpg)
问题描述
最近在小程序的开发过程中,遇到一个神奇的问题。
小程序用于发起网络请求的 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
类型时的判断和容错代码。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
JavaScript中Array数组的tips的讲解
以上就是微信小程序中如何解决wx.request对于JSON 含\u2028的处理异常的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的微信小程序中如何解决wx.request对于JSON含\u2028的处理异常全部内容,希望文章能够帮你解决微信小程序中如何解决wx.request对于JSON含\u2028的处理异常所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。