uniapp多端问题总结

2023-10-30

页面跳转相关

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 支付。代码参考
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uniapp多端问题总结 的相关文章

  • 十大PyTorch最常用的转换函数

    介绍 Pytorch是一个深度学习框架 广泛用于图像分类 分割 目标识别等各种任务 在这种情况下 我们必须处理各种类型的数据 很可能在大多数情况下 数据可能不是我们所需要的格式 PyTorch转换就是救星 torchvision trans
  • 恩施职业技术学院工程能力实训开班!青春逐梦,砥砺前行

    为深化校企合作 产教融合助力新工科建设 提升学生工程实践能力 电巢工程能力实训班按照不同岗位类别 匹配对应的企业岗位任职能力要求对学生开展分级培养 以产业需求为导向 培养创新型 应用型人才 6月13日上午 深圳电巢联合恩施职业技术学院 工程
  • SessionID漏洞

    漏洞原理 当用户第一次访问服务程序时 服务器端会给用户创建一个独立的会话Session 并且生成一个SessionID SessionID在响应浏览器的时候会被加载到cookie中 并保存到浏览器中 当用户再一次访问服务程序时 请求中会携带
  • golang命令行库cobra的使用

    简介 Cobra既是一个用来创建强大的现代CLI命令行的golang库 也是一个生成程序应用和命令行文件的程序 下面是Cobra使用的一个演示 Cobra提供的功能 简易的子命令行模式 如 app server app fetch等等 完全
  • Java long数据类型

    long数据类型是64位有符号的Java原始数据类型 当对整数的计算结果可能超出int数据类型的范围时使用 long数据类型范围是 9 223 372 036 854 775 808至9 223 372 036 854 775 807 2

随机推荐

  • JUC详细笔记

    此笔记根据黑马JUC课程整理 1 JUC概述 1 1什么是juc 在 Java 中 线程部分是一个重点 本篇文章说的 JUC 也是关于线程的 JUC就是 java util concurrent 工具包的简称 这是一个处理线程的工具包 JD
  • XHS信号和XVS信号

    XHS信号和XVS信号 camera的总体示意图如下 控制部分为摄像头上电 IIC控制接口 数据输出为摄像头拍摄的图像传到主控芯片 所有要有DATA 行场同步和时钟信号 摄像头有两种同步方式 行同步信号 HSYNC 和场同步信号 VSYNC
  • 分类问题的评价指标:二分类【准确率(Accuracy):用在数据均衡(每一类的样本数量相同)的数据集上】【精确率(Precision)】【召回率(Recall)】【F1】

    一 混淆矩阵 对于二分类的模型 预测结果与实际结果分别可以取0和1 我们用N和P代替0和1 T和F表示预测正确和错误 将他们两两组合 就形成了下图所示的混淆矩阵 注意 组合结果都是针对预测结果而言的 由于1和0是数字 阅读性不好 所以我们分
  • OpenGL系列教程之十二:OpenGL Windows图形界面应用程序

    这篇文章是关于使用MVC Model View Controller 模型 视图 控制 框架在windows平台下创建OpenGL图形界面应用程序 MVC框架在GUI Graphic User Interface 图形用户界面 应用程序中被
  • Docker之数据卷与Dockerfile

    一 docker基本运行 将容器后台运行并进入容器 docker run itd name 名字 centos 强制删除所有容器 docker rm f docker ps a 二 数据卷 目录挂载 docker在容器中管理数据主要有两种方
  • 【计算机网络】Linux环境中的TCP网络编程

    文章目录 前言 一 TCP Socket API 1 socket 2 bind 3 listen 4 accept 5 connect 二 封装TCPSocket 三 服务端的实现 1 封装TCP通用服务器 2 封装任务对象 3 实现转换
  • python高阶函数用法之map reduce

    map 函数 接收两个参数 一个是函数 一个是Iterable map将传入的函数依次作用到序列的每个元素 并把结果作为新的Iterator返回 gt gt gt def f x return x x gt gt gt r map f 1
  • 一直没懂PCB叠层设计,直到看见这篇文章......

    总的来说叠层设计主要要遵从两个规矩 每个走线层都必须有一个邻近的参考层 电源或地层 邻近的主电源层和地层要保持最小间距 以提供较大的耦合电容 下面列出从两层板到八层板的叠层来进行示例讲解 一 单面PCB板和双面PCB板的叠层 对于两层板来说
  • Python-文件操作

    Python文件操作 1 打开文件 使用open 函数打开文件 指定文件名和模式 常用模式有 r 读取 默认 w 写入 会先截断文件 a 追加 b 二进制模式 t 文本模式 默认 updating reading and writing f
  • titanic数据集_数据挖掘项目——泰坦尼克号生还预测

    数据集来源于kaggle经典竞赛数据集 一 目的 根据数据集中的信息 利用python机器学习对泰坦尼克乘客是否生还进行预测 二 数据集 我的数据集有三个 test train genderclassmodel 都是csv格式 test和t
  • stm32f4有重映射么_STM32 端口复用&重映射(USART Remap)

    下面跟大家说一下STM32单片机的端口重映射 因为是以自己为实例 这里是以USART1的重映射为例 因为我要一个TFT LCD屏的主控板 考虑到FSMC 我选用了STM32F103VCT6 型号的CPU 一不小心串口接到USART1上了 因
  • networkx画图(番外)——(1)自定义节点布局

    networkx画图 番外 1 自定义节点布局 networkx虽然非常方便 但在一些超大规模的图数据上 依然显得吃力 所以大多数时候 它仅仅是被用来做一些实例性的分析和可视化展示的 这需要学会如何灵活的画图 最重要的就是布局 即每个节点在
  • word中导入zotero的参考文献

    平时使用Zotero管理文献 使用Word写完论文后想用Zotero导入参考文献 也方便修改参考文献格式 Zotero 打开Zotero找到编辑 首选项 打开首选项 下载国标格式 引用 获取更多样式 搜索框 China Word Word中
  • 技术学习的思考

    学习新的技术 先了解这项技术有什么用 可以解决哪些技术难点 落地这项技术的场景 以及和其他技术的对比 和提出自己大概了解这项技术后存在的疑问 o 例如核间通讯IPC与芯片间通讯ICC有什么区别 对要学的技术梳理出一个框架 根据这个框架先找到
  • 数仓建模—宽表的设计

    宽表的设计 高内聚低耦合 宽表是数仓里面非常重要的一块 数仓是分层的 这是技术进步和时代变化相结合的产物 数仓的分层式为了更好地管理数仓以及更加高效地进行数据开发 宽表主要出现在dwd 层和报表层 当然有的人说dws 层也有 宽表 从字面意
  • springmvc文件上传 并读取excel文件基本写法 多文件时参数为 @RequestParam MultipartFile[] myfiles 单文件时直接传File...

    说明 上传multipartFile时 无法直接转为File去读取excel文件内容 因为为了安全 不可能知道客户端文件绝对路径 解决方法为在服务器端生成一个File文件 然后再读取这个服务器的文件内容保存到数据库 controller 导
  • 完美解决 ModuleNotFoundError: No module named 'pip'

    我在安装django的一个第三方包时 就是执行下边命令时cmd提示pip版本得更新 确怎么也更新不了pip pip install django grappelli 我进去anaconda 提示anaconda也需要更新 更新完以后 再次进
  • SpringBoot中CommandLineRunner接口起什么作用呢?

    转自 SpringBoot中CommandLineRunner接口起什么作用呢 下文笔者讲述SpringBoot中CommandLineRunner接口的功能简介说明 如下所示 SpringBoot中CommandLineRunner接口的
  • openwrt网络设置

    OpenWrt的网络配置文件是 etc config network 它负责交换芯片VLAN 网络接口和路由的配置 此文件在编辑和保存之后需要执行 etc init d network reload 命令 在变更生效前 停止和重启网络 目的
  • uniapp多端问题总结

    页面跳转相关 1 页面跳转传参报错 问题 小程序报错 SyntaxError Unexpected end of JSON inputat JSON parse 原因 是由于JSON parse无法识别某些url中的特殊字符比如 等特殊符号