上一篇是九月二十七日写的,而这一篇我动笔的时间是十月十日(特殊的日子),中间相隔十三天——当然是因为国庆节。说老实话,这十三天里面我都没有碰和小程序有关的东西——毕竟学习小程序的开发也只是起于兴趣,而 ...
上一篇是九月二十七日写的,而这一篇我动笔的时间是十月十日(特殊的日子),中间相隔十三天——当然是因为国庆节。说老实话,这十三天里面我都没有碰和小程序有关的东西——毕竟学习小程序的开发也只是起于兴趣,而平时的工作并不会涉及与其相关的东西——但是在这十三天里,我能明显的感受到小程序热正在逐渐的消退,或者说大家正在逐渐以一种较为平和的姿态接受它的存在,其实这是一件好事。期待公测的到来。
接下来我就直接进入正题了,另外,文末我想和大家分享一下我的国庆节。
PS:这篇文章是接着上一篇文章 一名Android开发者的微信小程序填坑之路《上》 写的,建议没看过上一篇文章的同学先看一下上一篇哈~
正文 6,后台接收 post 请求要表单?首先问题是:我要向后台 post 一些数据,但是后台需要接收一个表单,我应该怎样获得一个表单或者将本地的数据转换成一个表单呢?
在写 wechat-weapp-gank 的提交干货模块的时候,我就遇到了这个问题。一开始我挺纳闷的,明明是把后台需要的数据都给传过去了,结果后台老是跟我说我的数据不对,后来我才发现是因为后台那边要求接收一个表单,而我传过去的是一个 json 数据。于是我就开始了漫长的探索之旅。(就为了这一个问题,从晚上十一点多一直搞到第二天凌晨四点多。。。如果不是有一个群里有个老司机帮忙说不定就死在这个问题上了)
首先我想的是能不能把现成的 json 数据直接转化为 form 表单?因为我已经完成了获取要输的信息然后把它变成了 json 数据的工作,如果能直接把 json 对象转化为 form 对象的话我需要对程序做的改动肯定是最小的。然而遗憾的是,似乎并没有可行的方案。(也有可能是因为我 js 功底太差吧,我确实是没有找到相应的方法,要生成一个 form 似乎是需要 document 的,而小程序中我们并不能够得到它)
此路不通,另觅他途。在查阅资料的过程中,我发现在 HTML 中似乎是有 这个标签的,然后我就兴冲冲的又去翻阅了一下小程序的官方文档,果不其然,小程序还是很良心的,有这方面的描述:
然后我就兴冲冲的去按照官方的介绍用 标签来提交数据,js 里的代码是这样的:
formSubmit: function (event) { wx.request({ url: Constant.BASE_URL + "/add2gank", method: "POST", //按照官方文档,event.detail.value应该就是我满心欢喜的以为可以了,结果并不可以。。。后台还是跟我说获得的数据有问题,结果我 console.log() 了看 给我返回的数据,它竟然还是个 json。。。说好的 form 呢!感觉受到了欺骗。
濒临崩溃。幸好这时候一个老司机点醒了我:为啥那么纠结在本地数据是什么样子的?归根结底我们是要把数据传到后台去,那么只需要让数据在请求里面是 form 的格式不就 OK 了?所以 form 表单在请求里面是长什么样子的呢?
json数据: {name: "lypeer", gender: "男"} form数据: "name=lypeer & gender=男"1
2
3
所以只要直接对数据进行操作,不用去管什么鬼 json 对象 form 对象什么的,那位老司机写了个方法,我无耻的直接拿来用了:
function json2Form(json) {var str = []; for(var p in json){ str.push(encodeURIComponent(p) + "=" + encodeURIComponent(json[p])); } return str.join("&"); }