小程序兼容安卓和IOS数据处理问题及坑


Posted in Javascript onSeptember 18, 2018

最近开发微信小程序,遇到到过种坑,例如什么前端发送请求,后端请求成功,没有获取到前端传递的值;后端请求成功,并且值,前端就是出不来数据;请求接口出现Provision headers are shown的现象;到最后苹果手机上出现数据,安卓手机出现不了数据等等,非常多的bug。备注后端我用的php开发的,框架用的TP5.0,我一度怀疑是我框架的原因。安卓需要的是字符串,苹果好像都行吧,我是做的兼容处理。

作为一名程序员,连bug都没有,你还开发什么软件?废话不说了先上问题吧;

1.小程序前端发送请求给后端,常用的有2中方式,一种是get请求,一种是POST请求,首先举例get请求吧,

wx.request({
      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方法;

wx.request({
      url: that.globalData.baseUrl + 'wx/getToken',//请求后台接口
      data: {
       code: res.code
      },
      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 = json.replace("\ufeff", "")
var ob = JSON.parse(json)
  } }

转字符串还是json对象,一般都是转json对象,传值得时候转json字符串比较多。有时候返回的值可能会出现前面有个隐藏的点,JSON.parse处理返回什么“token 有个0”,那么需要用下面的处理一下数据var aa = res.data.trim();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()的语法。

结论:这是安卓机不支持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属性照常写,来兼容低版本。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一页面多XMLHttpRequest对象
Jan 22 Javascript
addEventListener和attachEvent二者绑定的执行函数中的this不相同
Dec 09 Javascript
解析Jquery的LigerUI如何实现文件上传
Jul 09 Javascript
js判断上传文件的类型和大小示例代码
Oct 18 Javascript
Node.js实现在目录中查找某个字符串及所在文件
Sep 03 Javascript
jQuery+HTML5实现手机摇一摇换衣特效
Jun 05 Javascript
javascript 实现文本使用省略号替代(超出固定高度的情况)
Feb 21 Javascript
JavaScript 完成注册页面表单校验的实例
Aug 19 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
Sep 19 Javascript
[原创]jquery判断元素内容是否为空的方法
May 04 jQuery
Element InputNumber 计数器的实现示例
Aug 03 Javascript
vue生命周期钩子函数以及触发时机
Apr 26 Vue.js
解决vue attr取不到属性值的问题
Sep 18 #Javascript
vue动画打包后失效问题的解决方法
Sep 18 #Javascript
vue自定义全局共用函数详解
Sep 18 #Javascript
vue-自定义组件传值的实例讲解
Sep 18 #Javascript
vuex actions传递多参数的处理方法
Sep 18 #Javascript
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
Sep 18 #Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
Sep 18 #Javascript
You might like
PHP取进制余数函数代码
2012/01/19 PHP
完美的2个php检测字符串是否是utf-8编码函数分享
2014/07/28 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
javascript 装载iframe子页面,自适应高度
2009/03/20 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
2016/08/02 Javascript
微信小程序动态添加分享数据
2017/06/14 Javascript
layui 表格的属性的显示转换方法
2018/08/14 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
js定时器出现第一次延迟的原因及解决方法
2021/01/04 Javascript
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
使用Python神器对付12306变态验证码
2016/01/05 Python
深入理解Python中装饰器的用法
2016/06/28 Python
详谈python在windows中的文件路径问题
2018/04/28 Python
python 寻找离散序列极值点的方法
2019/07/10 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
2019/08/12 Python
Windows下Anaconda和PyCharm的安装与使用详解
2020/04/23 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
Rodd & Gunn澳大利亚官网:新西兰男装品牌
2018/09/25 全球购物
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
大学生四个方面的自我评价
2013/09/19 职场文书
《一个中国孩子的呼声》教学反思
2014/02/12 职场文书
工程安全生产协议书
2014/11/21 职场文书
2014年图书馆工作总结
2014/11/25 职场文书
2015年测量员工作总结
2015/05/23 职场文书
2015年乡镇食品安全工作总结
2015/10/22 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书
python爬取网页版QQ空间,生成各类图表
2021/06/02 Python
大型强子对撞机再次重启探索“第五种自然力”
2022/04/29 数码科技