因为服务器只能接收x-www-form-urlencoded方式接收前端收到的数据 所以微信小程序开发的时候,必须鼓捣这个问题。
微信默认使用content-type是 application/json
用wx.request方法改掉header为x-www-form-urlencoded比较简单
wx.request({ 'content-type': 'application/x-www-form-urlencoded' })
这么干就可以了。
但问题是,微信小程序,似乎不会把我们的数据自动转换成为该格式数据。
解决方案是使用下面这种方法
function JSON_to_URLEncoded(element,key,list){ var list = list || []; if(typeof(element)=='object'){ for (var idx in element) JSON_to_URLEncoded(element[idx],key?key+'['+idx+']':idx,list); } else { list.push(key+'='+encodeURIComponent(element)); } return list.join('&'); }
测试
var data = { 'users' : [ { "id": 100, "name": "Stefano" }, { "id": 200, "name": "Lucia" }, { "id": 300, "name": "Franco" }, ], 'time' : +new Date }; console.log( JSON_to_URLEncoded(data) ); /* Output: users[0][id]=100&users[0][name]=Stefano&users[1][id]=200&users[1][name]=Lucia&users[2][id]=300&users[2][name]=Franco&time=1405014230183 */
如果你是使用ES2015,试试一行代码实现这个方法功能。 但你是复杂的数据,还是不要用下面这个方法了。
const toUrlEncoded = obj => Object.keys(obj).map(k => encodeURIComponent(k) + '=' + encodeURIComponent(obj[k])).join('&'); toUrlEncoded({hello: 'world', message: "JavaScript is cool"}); // => "hello=world&message=JavaScript%20is%20cool"