微信小程序中出现最多的一个问题,就是真机跟本地不同:我简单列举一些我发现的原因,给大家参考,大家也可以把自己发现的东西回复给我,给我参考:

本地看不到数据,就先让本地能看到数据,再看本帖。。。。
特别提示:当问题较为复杂时,请制作一个专门的最简demo,以便集中观察,确定问题。

看帖前需测试内容:
测试内容一:请同时测试安卓及ios至少各两款手机型号;
测试内容二:开发者工具内开启不检验域名,真机上打开调试进行测试;查看结果;
                    然后开发者工具上关闭不检验域名,真机上关闭调试进行测试;并查看结果;

测试完毕,对比以下结果说明进行排查:

1:本地可以看到数据,ios不行,安卓可以;(请同时测试ios9,ios10等多个苹果机型及IOS版本以便确定非独特某个ios版本的问题)
     可能是tsl版本问题不支持1.2导致,部分安卓可以允许tsl低于1.2而正常显示,而苹果不行;
     解决方法:参考此帖排查问题并修复:request:fail错误(含https解决方案)(真机预览问题
     可能是证书不受信任:苹果支持的证书列表:https://support.apple.com/zh-cn/HT204132
     假如是startssl及沃通的证书,可能无法使用,建议使用阿里云等证书;错误提示:        ios10.2及以上对证书有更高的限制,假如在此版本系统上无法使用,可能是证书问题;

此服务器的证书无效,您可能正在连接(错误样本来自@cc)

特殊情况:部分苹果手机可以,部分不可以,请查看不可以苹果手机的ios版本,因为如上所说,ios10.2等最新ios版本对证书有更高的要求,部分被惩罚的证书可能不再受到信任;

特殊情况二:TLS是1.2,但是访问时是TLS1.0,可能是JDK版本不足或者其他原因导致的;

更多ios相关问题请看:跳坑《一百四十四》ios苹果真机相关问题

2:本地可以看到数据,ios可以,安卓不行;(请测试多个安卓机型及安卓版本以便确定非独特机型问题)
     ios可以,而安卓不行,可能有如下几个情况
        情况一:使用了不兼容安卓的js,比如es6的Object.assign,部分es6不兼容安卓,即使开启es6转es5选项也无用;比如for of 和 forEach 需要换成for in;具体es6支持,请看:https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/details.html?t=201716
        情况二:证书缺失,大部分情况是缺失中间证书,检测地址:https://www.myssl.cn/tools/check-server-cert.html;中间证书安装参考:http://www.wxapp-union.com/forum.php?mod=viewthread&tid=1661
        情况三:证书不受信任
        情况四:测试机型较老,而tsl版本不支持;tsl需要支持较老版本,包括1.0,1.1;
        情况五:使用了promise兼容库:bluebird.js,这个兼容库在真机上使用问题,引入es6-promise.min.js;参考http://www.wxapp-union.com/portal.php?mod=view&aid=789

情况六:安卓能够接到(打印出)数据,但是无法解析json,请看底部的BOM问题说明;
        情况七:ios正常,有些安卓机无法读取某个属性

更多安卓问题请参考:跳坑《一百四十》Android安卓真机相关问题
3:本地可以看到数据,IOS及安卓均不可看到数据:可能是:
     情况一:使用了自签的证书;必须使用第三方受认可的证书(比如阿里云,腾讯云提供的证书)

情况二:使用了IP,必须使用备案的域名
     情况三:https问题,选项中选择了不检验域名选项,此选项对真机无效;

特殊提示:排除证书问题及查看免费证书地址请看此帖:跳坑《一百》ssl证书相关问题(SSL相关问题请在这问)
      
3-1:本地可以看到数据,打开调试也可以看到数据,关闭调试则看不到数据;或是开发版可以看到数据,体验版无法看到数据;或是打开调试可以上传文件,关闭调试则无法上传文件;
     请参考:跳坑《七十九》调试模式与非调试模式,不校验域名
     这个基本都是https问题,请参考上面的https问题解决的链接进行排查;     可能是很多种情况:比如域名没有备案,没有配置域名等等问题。。。
     特别提醒:开启调试模式可以在开发时暂时规避域名问题,可以通过开启上面的调试模式来先规避,然后排查其他问题,以便确定问题所在!(ssl证书问题似乎无法规避)     
     特殊情况:微信支付开发版可以,体验版不可以,可能是没有配置相应域名:需要在后台配置api.mch.weixin.qq.com域名;
     排除问题方法:开发者工具内关闭项目内的“不检验域名”选项,重启工具后看是否有合法域名报错,有则是域名未配置的原因,没有则是其他原因,请按https问题排除贴进行排除。
     特殊情况二:websocket遇到问题:WebSocket相关问题说明

4:url内使用了端口,参考:http://www.wxapp-union.com/forum.php?mod=viewthread&tid=1899

5:数据未加载成功,需要设定一定的延迟量,在加载数据完成后再渲染页面;

情况一:能够拿到数据,但是无法渲染出来,可以考虑将数据请求从onload中转移至ready内
     情况二:异步获取的数据,在渲染完成时仍未返回导致页面空白或未显示数据,需要设置延迟量

不太建议在 onLoad 里做一些和界面相关的操作,因为这个时候客户端可能还没有准备好视图界面;

6:一些特殊问题,比如utf-8的bom问题导致安卓不解析json问题;http://www.wxapp-union.com/forum.php?mod=viewthread&tid=1522

后台返回数据中有bom非法字符, 前端可以用.trim()方法去一下, 治标的话得让后台把所有的文件编码格式改为utf-8
官方解释:近日有发现类似问题的都是因为返回的数据是 UTF-8 with BOM(即数据的开头是一个不可见字符 unicode 65279),Android 平台没有自动过滤,导致 JSON.parse 失败。目前需要开发者自行兼容,下个版本 Android 会过滤此字符。

http://www.wxapp-union.com/forum.php?mod=viewthread&tid=1366:
你请求得到的res.data是否有值,如果没有值就检查一下ssl的问题。
如果有值但没有赋值成功,最可能的原因是获取的是一个字符串而不是一个数组或对象。
你需要做一个格式化, if(typeof res.data === 'string')var data = JSON.parse(res.data.trim());再用data赋值。
这个的原因是php输出的不会忽略BOM的文件头,特别使用windows自带写字板修改后就会有个\ufeff的字符在文件开始处,这个是不可见但会实际包含的。最后返回的就是字符串而非json数据,你直接对data赋值字符串是无法达到你想要的效果的,所以需要去掉,并重新格式化变成一个数组或对象。

wx.request返回的json是字符串,怎么破?
参考地址:http://www.wxapp-union.com/forum.php?mod=viewthread&tid=1522

解决方案:thinkPHP json 变成了文本(含BOM检测工具):http://www.wxapp-union.com/forum.php?mod=viewthread&tid=3032

7:真机跟本地样式不同:

情况一:可能使用了ios或安卓某一端不兼容的样式属性;目前编辑器检查越来越严格,标签不闭合可能导致一些奇怪的问题;
     情况二:使用了开发工具内的压缩代码,样式自动补全等设置,这些设置有时候会存在BUG会导致一些css丢失等问题;可以在取消部分设置后重试;
     情况三:颜色不对,或者设置颜色无效,请使用十六进制颜色码代替英文颜色;

8:微信版本不足,建议使用最新版本微信进行测试;最新版本查看地址:weixin.qq.com;此情况会有可能会导致uploadfile无效及新增api无效等问题:http://www.wxapp-union.com/portal.php?mod=view&aid=959

9:图片本地可以看到,但是真机无法显示;
     假如是背景图,可能是

本地资源无法通过 css 获取
background-image:可以使用网络图片,或者 base64,或者使用<image/>标签

假如是网络图片,可能是图片服务器设置了反盗链;

10:header设置异常:这个情况多数发生在使用POST时;

data 数据说明 最终发送给服务器的数据是 String 类型,如果传入的 data 不是 String 类型,会被转换成 String 。转换规则如下:

对于 header['content-type'] 为 'application/json' 的数据,会对数据进行 JSON 序列化
对于 header['content-type'] 为 'application/x-www-form-urlencoded' 的数据,会将数据转换成 query string (encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...)

11:网络请求设置了referer :跳坑《一百四十二》referer及服务器反盗链设置(403错误)

网络请求的 referer 是不可以设置的,格式固定为 https://servicewechat.com/{appid}/{version}/page-frame.html,其中 {appid} 为小程序的 appid,{version} 为小程序的版本号,版本号为 0 表示为开发版。

12:异步或同步问题;部分操作属于异步操作,比如uploadfile;http://www.wxapp-union.com/forum.php?mod=viewthread&tid=1380

13:超时:

request 的默认超时时间和最大超时时间都是 60s

14:可以参考这个:微信小程序常见错误及基本排除方法

15:使用微信浏览器测试相应问题,将接口,加载链接等使用微信浏览器进行打开,测试其是否适用微信,从而排除是否是代码问题及数据问题。

有时候,不知道错误因何产生,比如证书是否受信任,https错误,接口数据无法获取,加载失败等等错误,可以使用微信浏览器打开接口,加载相应数据,以便排查接口问题及其他相应问题;

从而确定是接口问题,还是代码问题或其他问题。

友情提示:如何打开微信浏览器?将自己的接口地址发到微信内,然后自己使用微信手机端打开这个链接,即可使用微信浏览器打开;

微信小程序真机预览跟本地不同的问题。原文地址:https://blog.csdn.net/qq_27187991/article/details/69664247/的更多相关文章

  1. 原创:跳坑指南——微信小程序真机预览跟本地不同的问题

    微信小程序中出现最多的一个问题,就是真机跟本地不同:我简单列举一些我发现的原因,给大家参考,大家也可以把自己发现的东西回复给我,给我参考:本地看不到数据,就先让本地能看到数据,再看本帖.... 1:本 ...

  2. 程序员的沟通之痛https://blog.csdn.net/qq_35230695/article/details/80283720

    个人理解: 一般刚工作的程序员总觉得技术最重要.但是当工作年限超过3年.或者岗位需要涉及汇报.需求对接等就会发现沟通非常重要.也许在大公司还不那么明显,但是在小公司.小团队或者创业,沟通甚至可以说是第 ...

  3. Socket的用法——NIO包下SocketChannel的用法 ———————————————— 版权声明:本文为CSDN博主「茶_小哥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/ycgslh/article/details/79604074

    服务端代码实现如下,其中包括一个静态内部类Handler来作为处理器,处理不同的操作.注意在遍历选择键集合时,没处理完一个操作,要将该请求在集合中移除./*模拟服务端-nio-Socket实现*/pu ...

  4. 解决微信小程序wepy真机预览跟本地表现不一样,数据变化了视图没变化

    当时搜了很多相关问题都没找到相似的 只看到有这个相似的描述wepy在onLoad里修改data-object的值页面不渲染 ,通过setData解决的. 但是这个还不是根本的解决办法,有些地方用set ...

  5. 微信小程序图片放大预览

    需求:当点击图片时,当前图片放大预览,且可以左右滑动 实现方式:使用微信小程序图片预览接口 我们可以看到api需要两个参数,分别通过下面的data-list和data-src来传到js中 wxml代码 ...

  6. 微信小程序真机定位问题技巧

    小程序导航 https://wq.xmaht.top 开发者在开发小程序的时候可能会碰到一些这样的问题: 问题1  开发者工具上看效果没问题,但是在真机上测试不行? 问题2  有用户遇到小程序功能无法 ...

  7. 【微信小程序】微信小程序wx.previewImage预览图片

    一.小知识 二.例子,配合轮播图使用效果更佳!(如图1) 1.wxml <scroll-view scroll-y="true"> <swiper catchta ...

  8. 微信小程序:图片预览

    wxml页面: <image src='{{UPLOAD_IMAGES_URL}}{{vv.img_s}}' data-src="{{vv.img}}" bindtap=&q ...

  9. js:上传图片并预览(https://blog.csdn.net/weixin_38023551/article/details/78318532)

    1: //filereader 的方法<form action="" enctype="multipart/form-data"> <inpu ...

随机推荐

  1. 乘风破浪:LeetCode真题_009_Palindrome Number

    乘风破浪:LeetCode真题_009_Palindrome Number 一.前言 如何判断一个整型数字是回文呢,我们可能会转换成String来做,但是还有更简单的方法. 二.Palindrome ...

  2. 附加进程找不到w3wp.exe进程解决方案

    在进程列表的下面,有个show processes in all sessions(显示所有用户的进程(U)),把它勾上就能看到了 ,就是这么简单.

  3. December 06th 2016 Week 50th Tuesday

    Behind every beautiful thing, there is some kind of pain. 美丽背后,必有努力. No pains, no gains. But it seem ...

  4. 只用最适合的! 全面对比主流 .NET 报表控件:水晶报表、FastReport、ActiveReports 和 Stimulsoft

    前言 随着 .NET 平台的出现,报表相关的开发控件随之出现,目前已经有若干成熟的产品可供开发人员使用,本文旨在通过从不同维度对比目前最流行的4款 .NET报表控件,给所有报表开发人员在做产品选型时一 ...

  5. BZOJ4653:[NOI2016]区间(线段树)

    Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x ...

  6. FireFox新标签页打开搜索和书签

    FireFox更新,发现界面完全不适应,虽然他是越做越丑,但是也没办法,一直用FireFox,许多书签,保存的密码现在都记不住了,只能靠保存的自动填充.... 进入正题,FireFox更新了之后,搜索 ...

  7. [Python 多线程] GIL全局解释器锁 (十三)

    Queue 标准库queue模块,提供FIFO(先进先出)的Queue.LIFO(后进先出)的队列.优先队列. Queue类是线程安全的,适用于多线程间安全的交换数据.内部使用了Lock和Condit ...

  8. Owin+ASP.NET Identity浅析系列(一)用户登录注册

    在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 使用VS2015创建MVC项 ...

  9. angularjs ng-if ng-show ng-hide区别

    在使用anularjs开发前端页面时,常常使用ng-show.ng-hide.ng-if功能来控制页面元素的显示或隐藏,那他们之间有什么不同呢? 实现原理方面:ng-show/ng-hide是通过修改 ...

  10. 通讯协议(一)HTTP协议

    协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器.目前我们使 ...