话说接触微信开发是毕业前的第一份工作,当时所做的就是一些微信上的活动推广页面,用到的jssdk就只有微信分享跟网页登录授权吧。记得很久以前微信分享是不需要后端支持的,后来世界变了,不能只靠前端来拯救世界了…
最近的项目就是微信端的,首先用到的就是jssdk。下面整理几个,还没用上的等用上了再来补充。
首先贴上微信jssdk地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
初始配置
1 | function wxConfig(option){ |
有
option
的参数是后端给的,具体的后端实现可以参考微信的官方demo
获取位置信息
1 | function getLocation(){ |
以上代码通过微信拿到经纬度后,向后端发起请求拿详细地址(想前端自己拿详细地址,可以借助于百度地图的api,百度地图在微信里能否使用还没做尝试)
微信支付
1 | function wxPays(option){ |
以上带
option
的参数需服务端提供,发起微信支付后,会自动调出微信支付的面板,完成支付或取消支付会进入相应的回调,根据微信官方提供的支付文档(业务流程说明),支付完成后,服务端需确认是否支付成功,所以我们还得向服务端发送一次支付结果确认请求。
当时调支付时一个很小的错误导致支付面板没弹出,就使用了支付文档里的示例demo
,如下
1 | function wxPays(option){ |
该方法在android
机上测试是有效的,在ios
机上测试是提示调用jsApi时没有传timeStamp
,不知道是什么鬼,哪位朋友知道怎么解决的,欢迎留言告知,不胜感谢
选择图片与上传图片
选择图片
1 | function uploadImage(){ |
上传图片
1 | function uploadToWx(localId){ |
感觉微信提供的能够调用手机拍照和相册的方法蛮实用的,一般这个在
app
里才能实现,浏览器一般也只能选择文件。选择了图片后,可以在回调里拿到图片的id
列表,本地的图片id
在微信里是可以用来显示图片的,通过该id
列表的每个id
(注意,这里是单个id
,不是列表),就可以调用微信上传图片的接口,将图片上传到微信服务器上,微信服务器目前对图片的保留时间是3天,上传成功后回调里可以拿到serverId
,服务端通过serverId
将微信服务器上的图片资源下载到自己的服务器或第三方进行存储。
目前用的微信jssdk就这几个,后续有用上会再补上。
下面说下最近开发中遇到的问题,避免以后踩同样的坑。
关于微信里的刷新
这个问题困扰了好久,也尝试过很多方法。
问题场景:有一个订单状态页面:订单提交成功,接单成功,待支付,支付成功待评价,评价成功。我用了一个页面,通过订单状态值来渲染对应的template,所以用户支付后刷新页面就应该看到待评价的内容,因为支付成功后页面刷新,订单状态值就改变了,评价后刷新是同样的道理。
尝试过的方法:
window.location.reload();
window.location.href = window.location.href;
window.location.href = window.location.href + ‘&r=’ + 时间戳
结果均以失败告终,页面刷新,数据没刷新,通过fiddler
查看网络请求发现,刷新页面时没有向服务器拿页面,说明拿的只是缓存,这种情况以前确实没遇到过,及时缓存严重,用时间戳的方法也一般可以解决。
后来在一个前端群里求助,得到了解决方法:window.location.reload(true)
,传true
强制刷新,好吧,看来还是得多看看基础,一直不知道这个方法还有个参数。这里也要感谢群里的那位朋友。
关于js的事件代理
以前一直有用js
的事件代理,这次场景跟以前稍微有点不同,先看代码
1 | <ul class="equipments-list" @click="toStatusPage($event)"> |
1 | toStatusPage: function(event){ |
很简单的一个列表进详情,为了节省内存,使用了代理的方式,用
ul
来代理事件,最初的想法是li
点击的时候获取他的orderId
,然后跳转到对应的详情页,当使用代理方式拿到的target
可能是span
,也可能是p
,如果层级很多就很可能是别的什么了。那么这里得想法吧拿到li
,所以使用了parentNode
这个东东,去判断li
在哪,用了一个简单的循环,拿到li
后结束循环,执行后面的操作,暂时这样解决了,还没有想到更好的方法,有更好的方法的朋友欢迎留言,让大家都学习下,谢啦!
好了,暂时就总结这么多吧,文中如有错误之处麻烦指正,谢谢!