微信小程序中出现最多的一个问题,就是真机跟本地不同:我简单列举一些我发现的原因,给大家参考,大家也可以把自己发现的东西回复给我,给我参考:
本地看不到数据,就先让本地能看到数据,再看本帖。。。。
特别提示: 当问题较为复杂时,请制作一个专门的最简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及以上对证书有更高的限制,假如在此版本系统上无法使用,可能是证书问题;
特殊情况:部分苹果手机可以,部分不可以,请查看不可以苹果手机的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内
情况二:异步获取的数据,在渲染完成时仍未返回导致页面空白或未显示数据,需要设置延迟量
6:一些特殊问题,比如utf-8的bom问题导致安卓不解析json问题;http://www.wxapp-union.com/forum.php?mod=viewthread&tid=1522
7:真机跟本地样式不同:
情况一:可能使用了ios或安卓某一端不兼容的样式属性;目前编辑器检查越来越严格,标签不闭合可能导致一些奇怪的问题;
情况二:使用了开发工具内的压缩代码,样式自动补全等设置,这些设置有时候会存在BUG会导致一些css丢失等问题;可以在取消部分设置后重试;
情况三:颜色不对,或者设置颜色无效,请使用十六进制颜色码代替英文颜色;
8:微信版本不足,建议使用最新版本微信进行测试;最新版本查看地址:weixin.qq.com;此情况会有可能会导致uploadfile无效及新增api无效等问题:http://www.wxapp-union.com/portal.php?mod=view&aid=959
9:图片本地可以看到,但是真机无法显示;
假如是背景图,可能是
假如是网络图片,可能是图片服务器设置了反盗链;
10:header设置异常:这个情况多数发生在使用POST时;
11:网络请求设置了referer :跳坑《一百四十二》referer及服务器反盗链设置(403错误)
12:异步或同步问题;部分操作属于异步操作,比如uploadfile;http://www.wxapp-union.com/forum.php?mod=viewthread&tid=1380
13:超时:
14:可以参考这个:微信小程序常见错误及基本排除方法
15:使用微信浏览器测试相应问题,将接口,加载链接等使用微信浏览器进行打开,测试其是否适用微信,从而排除是否是代码问题及数据问题。
友情提示:如何打开微信浏览器?将自己的接口地址发到微信内,然后自己使用微信手机端打开这个链接,即可使用微信浏览器打开;
本地看不到数据,就先让本地能看到数据,再看本帖。。。。
特别提示: 当问题较为复杂时,请制作一个专门的最简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及以上对证书有更高的限制,假如在此版本系统上无法使用,可能是证书问题;
特殊情况:部分苹果手机可以,部分不可以,请查看不可以苹果手机的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内
情况二:异步获取的数据,在渲染完成时仍未返回导致页面空白或未显示数据,需要设置延迟量
6:一些特殊问题,比如utf-8的bom问题导致安卓不解析json问题;http://www.wxapp-union.com/forum.php?mod=viewthread&tid=1522
7:真机跟本地样式不同:
情况一:可能使用了ios或安卓某一端不兼容的样式属性;目前编辑器检查越来越严格,标签不闭合可能导致一些奇怪的问题;
情况二:使用了开发工具内的压缩代码,样式自动补全等设置,这些设置有时候会存在BUG会导致一些css丢失等问题;可以在取消部分设置后重试;
情况三:颜色不对,或者设置颜色无效,请使用十六进制颜色码代替英文颜色;
8:微信版本不足,建议使用最新版本微信进行测试;最新版本查看地址:weixin.qq.com;此情况会有可能会导致uploadfile无效及新增api无效等问题:http://www.wxapp-union.com/portal.php?mod=view&aid=959
9:图片本地可以看到,但是真机无法显示;
假如是背景图,可能是
假如是网络图片,可能是图片服务器设置了反盗链;
10:header设置异常:这个情况多数发生在使用POST时;
11:网络请求设置了referer :跳坑《一百四十二》referer及服务器反盗链设置(403错误)
12:异步或同步问题;部分操作属于异步操作,比如uploadfile;http://www.wxapp-union.com/forum.php?mod=viewthread&tid=1380
13:超时:
14:可以参考这个:微信小程序常见错误及基本排除方法
15:使用微信浏览器测试相应问题,将接口,加载链接等使用微信浏览器进行打开,测试其是否适用微信,从而排除是否是代码问题及数据问题。
友情提示:如何打开微信浏览器?将自己的接口地址发到微信内,然后自己使用微信手机端打开这个链接,即可使用微信浏览器打开;