uniapp多端问题总结

页面跳转相关

1、页面跳转传参报错
  • 问题: 小程序报错 SyntaxError: Unexpected end of JSON inputat JSON.parse ()
    在这里插入图片描述
  • 原因:是由于JSON.parse无法识别某些url中的特殊字符比如&等特殊符号。
  • 解决办法:
    原来代码:
// 跳转所属专区
clickToTab(item) {
		this.$common._jumpToUrl('./modularDetail', 0, { curModular: JSON.stringify(item) })
}
onLoad(data) {
	this.curModular = data.curModular ? JSON.parse(data.curModular) : {},
}		

现在代码:

// 跳转所属专区
clickToTab(item) {
	// #ifndef MP-WEIXIN
	this.$common._jumpToUrl('./modularDetail', 0, { curModular: JSON.stringify(item) })
	// #endif
	// #ifdef MP-WEIXIN
	this.$common._jumpToUrl('./modularDetail', 0, { curModular: encodeURIComponent(JSON.stringify(item)) })
	// #endif
}
onLoad(data) {
	// #ifndef MP-WEIXIN
	this.curModular = data.curModular ? JSON.parse(data.curModular) : {}
	// #endif
	// #ifdef MP-WEIXIN
	this.curModular = data.curModular ? JSON.parse(decodeURIComponent(data.curModular)) : {}
	// #endif
}		
2、路由跳转时参数为null 或者 undefined
  • 问题:App和H5没问题,小程序报错
  • 原因:小程序会把参数转成字符串
  • 解决办法:
    在封装的接口请求中utils->required.js中添加判断,遍历参数把为null的值都删除
import {baseUrl} from "./config.js"
import $common from '@/common/common.js'
let content_type = 'application/json;charset=UTF-8';
export const request = function(url_adress, method, data) {
	return new Promise((resolve, reject) => {
		let url = baseUrl + url_adress;
		let headers = {
			"content-type": content_type,
		}
		if ($common._getStorage('token')) {
			headers.Authorization = 'Bearer ' + $common._getStorage('token')
		}
		if (typeof data == "object") {
			for (let key of Object.keys(data)) {
				if (data[key] == null || data[key] == undefined) {
					delete data[key];
				}
				if (data[key] instanceof Array) {
					const arr = [];
					const list = data[key];
					for (let listElement of list) {
						const abj = requestParamHandler(listElement);
						abj && arr.push(abj);
					}
					data[key] = arr;
				}
			}
		}
		uni.request({
			withCredentials:true,
			url: url,
			method: method,
			header: headers,
			data: data,
			success: res => {
				if(res.data.code === 200) {
					resolve(res.data)
				} else if (res.data.code === 401) {
					let routes = getCurrentPages();
					let curRoute = routes[routes.length - 1].$page.fullPath // 获取当前页面路由,也就是最后一个打开的页面路由
					$common._showModal('温馨提示', '请先去登录', '取消', '确定').then(() => {
						$common._removeStorage('token')
						// let path = curRoute.indexOf('redirect=') > -1 ? `/pages/login/index?redirect=${curRoute}` : `/pages/login/index`
						let path = `/pages/login/index?redirect=${curRoute}`
						$common._jumpToUrl(path)
					})
				}else{
					if (res.data.msg) {
						$common._showToast(res.data.msg)
					}
					reject(res.data)
				}
			},
			fail: err => {
				console.log('err', err);
			},
			complete: res => {
			}
		})
	});
	
}
3、订单倒计时方法,苹果手机时间显示NAN,安卓没有问题
  • 原因:苹果时间戳获取类型是2022/12/26 13:44:40,安卓手机获取格式2022-12-26 13:44:40
  • 解决办法:字符串替换改成苹果类型,这样都不会报错
// 订单倒计时 createTime-当前时间 expireTime-结束时间
export function timeDifference(createTime, expireTime){
   createTime = createTime.replace(/\-/g, '/')
   expireTime = expireTime.replace(/\-/g, '/')
   //截取字符串,得到日期部分"2009-12-02",用split把字符串分隔成数组
   var begin1=createTime.substr(0,10).split("/");
   var end1=expireTime.substr(0,10).split("/");
   //将拆分的数组重新组合,并实例成化新的日期对象
   var date1=new Date(begin1[1] + '/' + begin1[2] + '/' + begin1[0]);
   var date2=new Date(end1[1] + '/' + end1[2] + '/' + end1[0]);
   //得到两个日期之间的差值m,以分钟为单位
   //Math.abs(date2-date1)计算出以毫秒为单位的差值
   //Math.abs(date2-date1)/1000得到以秒为单位的差值
   //Math.abs(date2-date1)/1000/60得到以分钟为单位的差值
   var m= parseInt(Math.abs(date2-date1)/1000/60);
   //小时数和分钟数相加得到总的分钟数
   //createTime.substr(11,2)截取字符串得到时间的小时数
   //parseInt(createTime.substr(11,2))*60把小时数转化成为分钟
   var min1=parseInt(createTime.substr(11,2))*60+parseInt(createTime.substr(14,2));
   var min2=parseInt(expireTime.substr(11,2))*60+parseInt(expireTime.substr(14,2));
   var second1 = parseInt(createTime.substr(17,2));
   var second2 = parseInt(expireTime.substr(17,2));
   //两个分钟数相减得到时间部分的差值,以分钟为单位
   var n= second1 > second2 ? min2-min1-1 : min2-min1;
   //将日期和时间两个部分计算出来的差值相加,即得到两个时间相减后的分钟数
   return m + n
}

/**
* JS 计算两个时间间隔多久(时分秒)
* @param startTime "2019-10-23 15:27:23"
* @param endTime "2019-10-23 15:27:55"
* @return 1天2时3分5秒
*/
export function twoTimeInterval(startTime, endTime, str) {
 // 开始时间
 let d1 = startTime.replace(/\-/g, "/");
 let date1 = new Date(d1);

 // 结束时间
 let d2 = endTime.replace(/\-/g, "/");
 let date2 = new Date(d2);

 // 时间相差秒数
 let dateDiff = date2.getTime() - date1.getTime();

 // 计算出相差天数
 let days = Math.floor(dateDiff / (24 * 3600 * 1000));

 // 计算出小时数
 let residue1 = dateDiff % (24 * 3600 * 1000); // 计算天数后剩余的毫秒数
 let hours = Math.floor(residue1 / (3600 * 1000));

 // 计算相差分钟数
 let residue2 = residue1 % (3600 * 1000); // 计算小时数后剩余的毫秒数
 let minutes = Math.floor(residue2 / (60 * 1000));

 // 计算相差秒数
 let residue3 = residue2 % (60 * 1000); // 计算分钟数后剩余的毫秒数
 let seconds = Math.round(residue3 / 1000);

 let returnVal = ''
 if (str === '分') {
   // 返回到分钟
   returnVal =
      ((days <= 0) ? "" : days+"天") +
      ((hours <= 0) ? "" : hours +"时") +
      ((minutes <= 0) ? "" : minutes+"分")
 } else {
   returnVal = ((days <= 0) ? "" : days+"天") +
     ((hours <= 0) ? "" : hours +"时") +
     ((minutes <= 0) ? "" : minutes+"分") +
     ((seconds <= 0) ? "" : seconds+"秒");
 }
 return returnVal;

}

组件

api

  1. uni.requestPayment 支付。代码参考
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您下载了本程序,但是该程序存在问题无法运行,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是需要追加额外费用的)。另外,您不会使用资源的话(这种情况不支持退款),也可以找我们帮助(需要追加额外费用) 可打包多端运行,APP,H5,公众号,小程序等 ,三级分销,卡密充值,提供opai的反向代理,支持WEB端,SD绘画等AI绘画功能。基础的CHATPDF阅读功能,MarkDown语法,代码高亮,表格格式化等。 随着移动互联网技术的发展和用户需求的变化,【小程序名称】应运而生,以其轻量化、便捷化的设计理念为用户提供了一种全新的服务模式。作为一款无需下载安装即可使用的应用,【小程序名称】依托于微信庞大的生态系统,让用户在微信内就能轻松实现各种功能操作。 【小程序名称】的核心功能主要集中在【具体服务领域】,例如在线购物、本地生活服务、教育学习或健康管理等。它简化了传统APP繁琐的注册登录流程,支持微信一键授权登录,极大地提升了用户体验。用户通过搜索或扫描二维码,瞬间即可开启使用,享受快速加载、流畅运行的服务。 该小程序界面设计简洁明了,布局合理,易于上手。同时,其特色功能如实时更新的信息推送、个性化推荐以及社交分享功能,让用户能够及时获取所需信息,并方便地将优质内容分享至朋友圈或好友,实现信息的高效传播与互动。 【小程序名称】注重数据安全与隐私保护,严格遵守国家法律法规和微信平台的规定,确保用户数据的安全无虞。此外,其背后的开发团队持续迭代更新,根据用户反馈不断优化产品性能,提升服务质量,致力于打造一个贴近用户需求、充满活力的小程序生态。 总结来说,【小程序名称】凭借其小巧便携、快捷高效的特性,不仅节省了用户的手机存储空间,更为用户提供了无缝衔接的便利服务,是现代生活中不可或缺的一部分,真正实现了“触手可及”的智能生活新体验。只需轻点屏幕,无限精彩尽在掌握之中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值