Error in onLoad hook: “URIError: URI malformed“ found in…报错处理以及完善uniapp针对对象传参

使用uniapp传参的过程中遇到这么一个问题,当我们需要传整个对象作为参数时,我会先将这个对象先编码,然后再解码,从而获取到怎么参数,平常实操的时候也没有遇到过问题,但是今天测试的时候,刚好一个数据碰巧,就报错了,报错内容就是:

复制代码
//跳转前页面的方法
toDeviceDetail(deviceInfo) {
    //传参对象,使用encodeURIComponent编码
    let query = encodeURIComponent(JSON.stringify(deviceInfo))
	uni.navigateTo({
		url:'/pages/....../deviceDetail?deviceQuery='+ query
	})
},
 
 
// 跳转后页面获取的参数的方法
onLoad(options) {
    let obg ={}
    // 获取传递的对象参数,使用decodeURIComponent解码,并转为对象
    obj = JSON.parse(decodeURIComponent(options.deviceQuery));
}

bug原因是,如果编码的对象中的参数有"%",那么就会对编码跟解码造成问题,从而报错

解决方案:正常解码,编码时对所有"%"进行单独处理,手动转换为"%25",代码如下:

复制代码
toDeviceDetail(deviceInfo) {
    //传参对象,使用encodeURIComponent编码
    let str = JSON.stringify(deviceInfo)
    //注意这里------------------------------------------------------------------
    str = str.replace(/%/g, '%25')
    //这里---------------------------------------------------------------------------------
    let query = encodeURIComponent(str)
	uni.navigateTo({
		url:'/pages/....../deviceDetail?deviceQuery='+ query
	})
},

最终实现在uni-app中跳转页面并传递对象参数的需求 解决这个问题的关键就是需要手动转换为"%25"

相关推荐
hachi031316 分钟前
Vue中input disabled时点击事件不触发怎么办?
javascript·vue.js·ecmascript
漫天黄叶远飞32 分钟前
别再把对象当“字典”!JS 零基础也能看懂的“属性账本”拆解笔记
javascript
华仔啊35 分钟前
20个CSS实用技巧,10分钟从小白变大神!
前端·css
起名时在学Aiifox37 分钟前
Vue3 + Element Plus 表格排序实战:基于状态字段的智能排序方案
前端·javascript·vue.js·element plus
再吃一根胡萝卜41 分钟前
从 Element UI 到 Element Plus:el-table 大数据量性能为何下降了?
前端
转转技术团队43 分钟前
转转UI自动化走查方案探索
前端
yzx9910131 小时前
基于Flask的智能语音增强系统模拟
前端·javascript·html
青衫码上行1 小时前
【Java Web学习 | 第14篇】JavaScript(8) -正则表达式
java·前端·javascript·学习·正则表达式
我的虾分发1 小时前
虾分发是一个键打包封装APP内测分发平台
javascript
草帽lufei1 小时前
解锁AI新维度:深入体验Google Antigravity的Gemini3模型
前端·ai编程·gemini