微信小程序python后端json错误_微信小程序 wx.request 对于 JSON 含 \u2028 处理异常

本文介绍了微信小程序在处理包含u2028字符的JSON响应时出现的解析异常问题。在真机(iOS和Android)上,由于JavaScript引擎的不同,导致JSON解析失败,而在开发者工具中正常。分析了可能的原因和解决方案,强调了在编写业务代码时需要考虑res.data可能是Object或String类型的兼容性问题。
摘要由CSDN通过智能技术生成

问题描述

最近在小程序的开发过程中,遇到一个神奇的问题。

小程序用于发起网络请求的 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 类型时的判断和容错代码。

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序是一种轻量级的应用程序,通过微信进行访问和使用。而Django是一种使用Python编写的高级Web开发框架,可以轻松构建复杂和高性能的Web应用程序。 将微信小程序与Django后端部署结合起来,可以实现小程序和服务器之间的数据交互和业务逻辑处理。以下是微信小程序Django后端部署的步骤: 1. 准备环境:首先确保已经安装了Python和Django。可以使用pip安装Django,然后创建一个Django项目。 2. 编写后端代码:在Django项目中,创建一个API视图,用于接收和处理来自小程序的请求。可以使用Django的URL路由器来将请求路由到相应的API视图上。 3. 数据库配置:在Django的settings.py文件中配置数据库连接,以便后端可以从数据库中读取和写入数据。可以选择使用MySQL、PostgreSQL或者SQLite作为数据库。 4. 编写接口逻辑:在API视图函数中,编写处理小程序请求的代码。可以根据需求查询数据库、处理数据、验证用户身份等等。 5. 部署到服务器:将Django项目部署到服务器上,可以选择使用Nginx+uWSGI、Apache+mod_wsgi等方式来进行部署。 6. 小程序调用后端接口:在小程序中使用wx.request方法来发起HTTP请求,调用Django后端提供的API接口。 7. 数据交互和处理:通过HTTP请求和响应,实现小程序和Django后端之间的数据交互和业务逻辑处理。可以使用JSON数据格式进行数据传递和解析。 通过以上步骤,就可以将微信小程序与Django后端部署结合起来。这样,小程序用户可以通过小程序界面进行各种操作,而后端服务器会相应地处理请求并返回相应的数据给小程序。这种架构可以使小程序更加强大和灵活,同时也能为开发者提供更多的数据处理和业务逻辑的扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值