⼩程序兼容安卓和IOS数据处理问题及坑
最近开发⼩程序,遇到到过种坑,例如什么前端发送请求,后端请求成功,没有获取到前端传递的值;后端请求成功,并且值,前端就是出不来数据;请求接⼝出现Provision headers are shown的现象;到最后苹果⼿机上出现数据,安卓⼿机出现不了数据等等,⾮常多的bug。备注后端我⽤的php开发的,框架⽤的TP5.0,我⼀度怀疑是我框架的原因。安卓需要的是字符串,苹果好像都⾏吧,我是做的兼容处理。
作为⼀名程序员,连bug都没有,你还开发什么软件?废话不说了先上问题吧;
1.⼩程序前端发送请求给后端,常⽤的有2中⽅式,⼀种是get请求,⼀种是POST请求,⾸先举例get请求吧,
url: that.globalData.baseUrl + 'user/add',//请求后台接⼝
data: {
code: avatarUrl,
username: nickName }
header: {
'content-type':'application/json',// 默认值
token: wx.getStorageSync('token')
},
method: "get",
success: function (res) {
// console.log(res)
}
})
这种传递⽅式是没有什么问题,后端怎么都会接受到数据,前端也可以接受到数据。
主要是看第⼆种post⽅法;
url: that.globalData.baseUrl + 'wx/getToken',//请求后台接⼝
data: {
code: de
},
header: {
"Content-Type": "application/x-www-form-urlencoded",
},
method: "POST",
success: function (res) {
console.log(res);
wx.setStorageSync('token', res.data.data)
}
})
这种情况是后端是可以接受到数据的,,但是把 "Content-Type": "application/x-www-form-urlencoded",换成 'content-
type':'application/json',后端接⼝就接收不到数据,但是有的⼩程序上⾯post请求中header头换成'content-
type':'application/json',也能接受到数据。但是我后端就是不能,后来我就换成了这个。
2.后端请求成功,并且值,前端就是出不来数据?
主要是请求的类型和你返回给前端的数据类型不对⼀致。这是你就需要及时检测数据类型,并且换成对应的数据类型。
3.请求接⼝出现Provision headers are shown的现象
出现上述现象主要是应为阻塞的原因,主要需要下⾯⼏个⽅⾯,⾸先是否⽤了断点,断点没注意,就会出现;数据库⽅⾯的请求连接是否过长,否则也会出现。⼩程序要求速度快,所以⼀般都⽤原⽣数据库接⼝更好点,响应速度短,界⾯反应也快。
4.到最后苹果⼿机上出现数据,安卓⼿机出现不了数据
例如后端返回数据出现是这种 "{"code":1,"data":"4f756fd91b8a81f1","msg":"请求成功"}" ,那么需要对应处理:⾸先判断是那种数据类型
var json =res.data
if (typeof json != 'object') {
if (json != null) {
json = place("\ufeff", "")
var ob = JSON.parse(json)
} }
转字符串还是json对象,⼀般都是转json对象,传值得时候转json字符串⽐较多。有时候返回的值可能会出现前⾯有个隐藏的点,JSON.parse处理返回什么“token 有个0”,那么需要⽤下⾯的处理⼀下数据var aa = im();var bb =
JSON.parse(aa);谢谢⼤家,第⼀次写。以前都是印象笔记上写;现在简书上写。请多多指教
我总结下我印象深刻的⼏个坑~
1.回答下最开始的那个问题,⼿写⼀个⽇历,为什么在安卓能遍历显⽰,⽽苹果⾥却不显⽰?
⾸先确定这并不是遍历的bug,肯定是兼容性问题,遍历这是最基本的语法,问题肯定出在遍历的数据处理阶段,看了代码果不其然,结论就是:ios 系统的问题,⽐如newDate(“2018-08-08”),在ios会出现NaN的情况,ios只⽀持newDate(“2018/08/08”)
2.video 视频格式m3u8,在ios⾥边⼉不能播放,但是安卓能正常播放?
分析
官⽅给的例⼦,是mp4格式的⽂件,ios可以播放,⼩程序开发者平台的论坛也有类似的问题,但是没有准确的答案,我开始考虑转换下格式,奈何,技术不够,尝试添加在image 标签添加 custom-cache={{cache}} ,data 中添加 cache:false问题解决了。
解决
<video src="{{sbDress}}" controls custom-cache="{{cache}}"></video>
3.⼩程序WxParse 包含图⽚安卓端⽆法加载
分析
wxparse 是⼩程序⽤于解析富⽂本编辑器⽣成代码的插件,⽤于展⽰⼀般的图⽂。在安卓⼿机端如果内容包含图⽚的标签时整个内容都⽆法加载出来,在⼿机端查看console,发现安卓机在console.dir()的时候报错,这是由于安卓机不⽀持console.dir()的语法。在安卓手机上运行php
结论:这是安卓机不⽀持console.dir()的语法,使⽤console.log()代替。
4.安卓上图⽚会出现卡顿,变形,然后才会显⽰正常的图⽚⼤⼩
分析
开发⽂档⾥写明:注:image组件默认宽度300px、⾼度225px,开发时所有image的⼩图标都使⽤了mode=”widthFixed”,只设置了宽度,让⾼度⾃适应,就会出现图⽚加载时初始化⾼度位225px,加载完毕才显⽰mode的⾼度,由于安卓机这个卡顿教明显,才会出现瞬时的变形。
结论:今后使⽤image 标签,尽量固定宽⾼。
5.navigationBar 在安卓机中位置为左边,在苹果中居中显⽰,那么标题字数多了之后苹果就会默认使⽤…代替剩余的⽂字
分析
这个也不是bug,只不过时显⽰问题,⽬前版本6.6.0⾥⽀持在window属性⾥设置navigationStyle由默认样式修改为custom,⽀持⾃定义样式。所谓的⾃定义样式,就是默认导航,只剩⼀个胶囊的导航。
结论:app.json⾥边⼉设置window{“navitionStyle”:”custom”},后要⾃⼰使⽤在wxml,and wxss⾥写样式显⽰头部的导航栏。
注意
由于该属性是6.6.0才⽀持,所以需要将其他的window属性照常写,来兼容低版本。
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论