不为成仙,只为在这红尘中等你回来。

您现在的位置是:网站首页>>Flask

Python Flask 构建微信小程序订餐系统 11-3 分享功能 问题集锦

2019年7月18日 23:42 | 分类:Flask | 标签: Flask 微信小程序

最近在学习 慕课网 Python Flask 构建微信小程序订餐系统,在 11-3 美食详情和分享功能一节中后端 /member/share 收不到前端 POST 的数据,被该问题卡了两天,总算发现了原因所在,特此记录下来,以供后来者查看。

楼主遇到该问题,刚开始以为是漏掉了视频中某一关键点或者代码编写错漏啥的,前前后后视频又去看了好几遍,一行一行的去比对代码,可 TM 后端 /member/share 始终收不到前端 POST 的数据,奇了怪了(抓狂啊~~~)。所以楼主照着这个思路去百度按照 “小程序转发后端收不到 POST 的数据” 搜索答案,99%的答案都是说把 header: {'content-type': 'application/json'} 换成 header: {'content-type': 'application/x-www-form-urlencoded'},可是我的代码里已经是这个了,失败!

于是乎楼主又接着捣鼓代码,看看代码都运行到了哪里?设置了打印数据 console.log("test111")

onShareAppMessage: function () {
        var that = this;
        console.log("test111")
        return {
            title: that.data.info.name,
            path: '/pages/food/info?id=' + that.data.info.id,
            success: function (res) {
                console.log("test222")
                // 转发成功
                wx.request({
                    url: app.buildUrl("/member/share"),
                    header: app.getRequestHeader(),
                    method: 'POST',
                    data: {
                        url: utils.getCurrentPageUrlWithArgs()
                    },
                    success: function (res) {
                        console.log("test333")
                    }
                });
            },
            fail: function (res) {
                // 转发失败
                console.log("test444")
            }
        }
    }

经过测试发现,Console 只能打印 console.log("test111"),于是接着搜索 “onShareAppMessage 接收不到 POST 数据”,又过了很久很久,当看到某个帖子的答案时,楼主恍然大悟,发现问题所在了。“分享监听”能力调整官,不再支持分享回调参数 success、fail、complete。至此问题找到了,目前也没什么好的解决方案,我看别人的几种思路:1.分享的回调是取消了,但可以通过 onShareAppMessage 设置个状态,获取到是否分享操作(可以曲线拿到分享事件)。2.通过页面切换出去分享到再次回到页面的时间差大于2秒判定分享成功(不那么可靠,但有什么办法呢)。

最后奉上我的代码,在 onShareAppMessage 返回前发送 POST 请求到后端,目的就是处理分享数据,其他的楼主暂时无能为力,姑且先放之:

    onShareAppMessage: function () {
        var that = this;
        wx.request({
            url: app.buildUrl("/member/share"),
            header: app.getRequestHeader(),
            method: "POST",
            data: {
                url: utils.getCurrentPageUrlWithArgs()
            },
            success: function (res) {

            }
        });
        /*
        小程序分享接口调整,不再支持分享回调参数 success、fail、complete
        https://developers.weixin.qq.com/community/develop/doc/000eacab888a20e8a2579099754401
         */
        return {
            title: that.data.info.name,
            path: '/pages/food/info?id=' + that.data.info.id,
        };
    }