微信小程序坑集
1. 微信小程序不支持cookie
1. 使用Reids存储session
2. 使用3rd_session建立会话关系
2. 微信小程序post请求,服务端获取不到参数
1. 需要把Content-type改成‘application/x-www-form-urlencoded’才可以正常获取
2. 修改Content-type后,请求参数不会自动序列化,需要使用JSON.stringify转化字符串才可以正常请求
客户端
wx.request({ url: app.requestUrl("Index/answer"), method: 'POST', data: { answer: JSON.stringify(needData), }, header: { "content-type": "application/x-www-form-urlencoded" }, dataType: "json", success: function(res) { } });
服务端
public function answer(){ $answer=I('post.answer'); $answer=htmlspecialchars_decode($answer); $answer=json_decode($answer); }
3. 微信小程序wx.request会自动对响应数据执行JSON.parse,JSON.parse执行失败不会抛出错误或警告(php文件为BOM编码时,响应数据会带上编码符。因为wx.request没有做trim处理,所以JSON.parse会执行失败,返回json字符串!该问题很难追踪,因此纠结了一天)
4. 有些手机不支持Object.assign方法,如果使用了该方法会出现莫名其妙的报错(并不会提示Object.assign is not function,而是导致调用了Object.assign方法的方法不能被调用)!
解决方法:直接写一个合并对象的方法!
function assignObject(o, n) { for (var p in n) { if (n.hasOwnProperty(p) && (!o.hasOwnProperty(p))) o[p] = n[p]; } }
5. 不支持在对象使用解构表达式
var arr=[1,2,3,4,5]; var obj={ node:123, name:"huang" }; var newarr=[...arr,6,7,8]; // 可以解析 var newobj={...obj,age:12}; // 无法解析,报错
6. 服务器使用https协议时,外链也需要使用https协议,否则ios系统不支持(android是支持的)
解决方法: 把外链的http协议转换成https协议(外链需要支持https协议)
7. 自己写的遮罩层无法遮盖 textarea组件placeholder
解决方法:弹出遮罩层的时候把textarea组件隐藏,关闭遮罩后重新显示textarea组件
8. picker-view组件无法滚动(当picker-view处于display:none状态,去修改picker-view的value会导致组件卡主无法滚动)
解决方法:修改picker-view组件的value属性的前picker-view必须处于正常(display:block)状态