微信小程序之页面跳转传参数据:json 字符串转对象报错

本文主要讲述微信小程序从A页面向B页面跳转传参时,部分参数JSON解析报错的问题。原因是页面传输数据太大,部分内容被截断,因微信官方限制页面跳转参数数据大小。解决方法有设置缓存、传id重新请求接口、使用全局变量,其中使用全局变量较推荐。

工作中遇到了这个问题,之前也有遇到过,只是没有去研究这个问题,接下来简单说明一下。

(一)问题详情

我们在小程序的A页面向B页面跳转的时候,传了页面参数为param(页面参数值只能是字符串,参数值是根据用户点击的信息而不同的),所以传数组或对象需要使用JSON.stringify()转换,到了B页面需要将param获取到并通过JSON.parse()解析,结果问题是有些传过来json正常解析,有些则报这个错:
json解析报错

也就是说B页面获取到的参数param值格式不是json格式,但是我是通过JSON.stringify()做数据转换的,格式有问题A页面跳转就会报错了,所以是参数传输过程微信小程序官方工具做了处理。

(二)问题原因

查了一下,可以正确从A页面跳转到B页面带参数正常显示的,和不正常显示的控制台输出对比一下,发现原来是这个原因造成的。-_-

1、json解析正常页面获取到的数据格式是完整的:
正常页面
2、json解析错误不正常页面显示获取到的数据是不完整的:
不正常解析

总结: 由于页面传输的数据太大,导致部分传输的数据内容被截断,导致json格式解析报错,微信官方是有限制页面跳转参数数据大小的,本人忘记了,知道的欢迎留言哈。

(三)解决方法

1、通过A页面设置缓存数据到B页面获取缓存到的数据格式来传输,不过不推荐,因为缓存数据大小也是有限制的,不适合大数据格式的缓存,小数据是可以的。
2、通过A页面传一个id到B页面,然后再重新请求接口获取新数据。
3、可以通过将A页面需要传的数据赋值给全局变量app.js中的全局变量,然后B页面getApp()获取全局变量就可以了(推荐,经常用)。

### 微信小程序页面跳转传递参数的方法 在微信小程序中,可以通过`wx.navigateTo`方法来实现在页面跳转的同时传递参数。对于简单的数据类型可以直接附加到URL后面作为查询字符串的一部分;而对于复杂的数据结构(如对象),则需先将其序列化为JSON字符串再进行传输。 #### 基本语法 当需要从一个页面导航至另一个新页面时,可调用如下API: ```javascript wx.navigateTo({ url: '目标页面路径?参数名1=值1&参数名2=值2...' }) ``` 其中,“?”之后的部分即是要发送给下一个页面的信息[^3]。 #### 实际案例展示 假设有一个列表页想要链接到详情页,并且希望把选中的项目信息一并带给后者处理,则可以在触发事件处理器内完成此操作: ```javascript // 列表项点击响应函数 function onItemTap(e){ let itemIndex = e.currentTarget.dataset.index; // 获取当前项目的详细资料 let selectedItemInfo = JSON.stringify(this.data.items[itemIndex]); // 执行页面切换动作并向目的地址追加所需携带的数据 wx.navigateTo({ url:`../detail/detailPage?itemData=${selectedItemInfo}` }); } ``` 上述代码片段展示了如何通过`JSON.stringify()`方法将JavaScript对象换成JSON格式字符串以便于附着在请求链接上[^4]。 而在接收端——也就是被访问的目标页面中,应当重写其默认加载行为以读取这些传入的变量: ```javascript Page({ onLoad:function(option){ try { // 解析接收到的对象形式参数 this.setData({ receivedObject : JSON.parse(decodeURIComponent(option.itemData)) }) } catch(error) {} // 对其他简单类型的参数做相应处理... } }); ``` 这里利用了`decodeURIComponent()`解码可能存在的特殊字符编码问题,确保能正确解析原始数据[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值