小程序: 不支持 FormData(坑)
小程序不支持 formdata 解决方案
坑
小程序环境不存在 FormData 全局对象,除一些二进制数据(File/Blob) 需要用到 FormData 的场景,可以直接使用
x-www-form-urlencoded
替换,小程序的请求工具,会自己替换成 FormData 传递。上传文件等场景就另外处理了。
我遇到的
POST https://teacher-app-api.beta.saybot.net/api/v2/clazz/24058340/inviteStudent
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1dHl_TOKEN
mobile=18602131601&passportId=70691809&chineseName=%E5%AD%A6%E7%94%9F&englishName=student
思路1
看起来像 FormData,实际上是 urlencoded
思路2
简单实现一个 formdata 方法,提交 formdata
wx.request({
url: 'https://api.zbgedu.com/api/edu/zbids/student/studentAddToActivity',
method: 'POST',
header: {
'content-type': 'multipart/form-data; boundary=XXX'
},
data: '\r\n--XXX' +
'\r\nContent-Disposition: form-data; name="studentId"' +
'\r\n' +
'\r\n' + params.studentId +
'\r\n--XXX' +
'\r\nContent-Disposition: form-data; name="activityId"' +
'\r\n' +
'\r\n' + params.activityId +
'\r\n--XXX--',
success: function (res) {
console.log(res, '参加活动接口')
}
})
function formdata(obj = {}) {
let result = "";
for (let name of Object.keys(obj)) {
let value = obj[name];
result +=
"\r\n--XXX" +
'\r\nContent-Disposition: form-data; name="' +
name +
'"' +
"\r\n" +
"\r\n" +
value;
}
return result + "\r\n--XXX--";
}